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

Не могу найти ничего доступного в настоящее время в дикой природе, что кажется странным.

Так что, прежде чем я сделаю свой собственный, кто-нибудь знает о std-совместимом потоке строк, который выделяет память в стеке?

Я думаю о 2 способах достижения этого:

Изначально использовать статический буфер в стеке (возможно, это параметр шаблона, позволяющий настраивать время компиляции)

  1. Когда закончится пространство, вернитесь к использованию динамического хранилища
  2. Когда заканчивается место, используйте alloca, чтобы увеличить объем стека

Это позволит быстро вводить в поток строк строки, длина которых меньше заданного размера.

Подходящий выбор для начального размера будет означать, что такие вещи, как ведение журнала, могут быть достигнуты без частого изменения размера из кучи.

1 Ответ

4 голосов
/ 24 декабря 2011

Вы можете получить те же преимущества, используя std::basic_stringbuf<char, char_traits<char>, pooled_allocator>, где вам нужно только написать объединенный распределитель.

Затем просто создайте basic_iostream, прикрепленный к этому буферу.

Илисоздайте новый класс, полученный из basic_streambuf.

, но не переписывайте stringstream.Библиотека iostreams разработана по расширению путем замены объекта буфера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...