Настройте количество данных std :: string в стеке - PullRequest
2 голосов
/ 24 сентября 2019

Я бы хотел увеличить количество std::string данных, которые размещены в стеке.По умолчанию должно быть 16 байтов, я бы хотел что-то вроде 32 байта.Что я не уверен, так это как действовать: являются ли 16-байтовые значения по умолчанию частью распределителя по умолчанию, так что изменение распределителя будет достаточно?Или было бы быстрее использовать что-то вроде boost::small_vector?

Ответы [ 2 ]

3 голосов
/ 24 сентября 2019

Оптимизация коротких строк - это просто оптимизация.Стандарт вообще не охвачен, что означает, что это зависит от индивидуальных реализаций стандартной библиотеки, используют ли они ее и предоставляют ли они какой-либо контроль над ней.Обратитесь к документации вашей стандартной библиотеки.Имейте в виду, что использование этого сделает ваш код непереносимым.

Я не знаю ни о какой стандартной реализации библиотеки, которая предоставляет какой-либо контроль над этой функцией.

2 голосов
/ 24 сентября 2019

Зависит от того, какие стандарты вы хотите поддерживать.До C ++ 11 распределители были без сохранения состояния.После C ++ 11 экземпляр предоставленного объекта распределителя хранится в классе, осведомленном о распределителе, и управляет его заменой.Проблема заключается в том, что сам объект не хранится в автоматическом хранилище или, по крайней мере, не ограничивается таким типом хранилища.

Поскольку каждая реализация std :: basic_string имеет различный размер и полезную область (например,Реализация gcc - только 16 байт, т.е. 15 + конечный ноль, clang 22 байта и т. д.), и вы не можете изменить класс библиотеки; для фактического использования настраиваемого единого входа вам, вероятно, придется вручную предоставлять хранилище в стеке и создавать вокруг него адаптер класса.станд :: basic_string.

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