Строковый класс, размещающий в стеке для маленьких строк? - PullRequest
9 голосов
/ 24 марта 2011

Кто-нибудь знает, существует ли класс строк, совместимый с интерфейсом STL, который выделяет память для маленьких строк в стеке (до определенного порога) и кучу для больших строк?

Я стремлюсь оптимизировать программу и использую множество небольших локальных строк, которые легко помещаются в стеке, а не размещаются в куче.

Ответы [ 4 ]

1 голос
/ 17 сентября 2012

Это старый вопрос, но я чувствую, что это лучше, чем любой из текущих ответов.

http://llvm.org/docs/ProgrammersManual.html#dss_smallstring

По сути, это то, что вы хотите.Кстати, tcmalloc увеличил производительность в моей (плохо спроектированной: D) программе интенсивного выделения строк на 10%.Кроме того, вы должны профиль, чтобы доказать, что ассигнования являются вашей проблемой перфект.

1 голос
/ 24 марта 2011

Реализация vstring (__versa_string) из gcc может выполнить небольшую строковую оптимизацию и имеет интерфейс std string.Если вы используете gcc, достаточно легко включить ext / vstring.В противном случае вы сможете адаптировать его к вашему компилятору / окружению.

1 голос
/ 24 марта 2011

Вы можете предоставить собственный распределитель для std::basic_string (это третий аргумент шаблона). Этот ответ объясняет, как его использовать, и ссылается на реализацию стекового распределителя, который можно использовать.

0 голосов
/ 24 мая 2012

__ versa_string SSO-версия может хранить не более 15 байтов в стеке и, если это так, резервирует 16 байтов независимо от размера строки (http://codepad.org/2M7N9cTu).

http://www.and.org/ustr/ может повторно использовать буфер стека, но у меня возникли проблемы с его связью в Debian Wheezy 64bit.

http://freecode.com/projects/str-class может повторно использовать буфер стека.

Я написал строку только для заголовкаКласс, который использует только четыре байта и может повторно использовать буфер стека: http://code.google.com/p/libglim/source/browse/trunk/gstring.hpp
Он имеет ограниченную совместимость с STL: basic_streambuf реализован для использования с std :: ostream.

...