Используют ли отдельные экземпляры C ++ std :: string один и тот же распределитель? - PullRequest
7 голосов
/ 10 марта 2011

Меня всегда интересовало, является ли экземпляр std::string, который я использую в своем коде C ++, одним и тем же распределителем или у них есть свои собственные отдельные пулы памяти?

Очевидно, что один общийпул памяти между несколькими часто создаваемыми и уничтожаемыми строками более эффективен.Кто-нибудь может подтвердить или опровергнуть это для меня, пожалуйста?

Ответы [ 2 ]

10 голосов
/ 10 марта 2011

По умолчанию все они используют std::allocator, который использует стандартные подпрограммы памяти для получения свободных блоков кучи. На этом слое нет объединения.

(Однако большинство реализаций кучи используют выделенную кучу с низкой фрагментацией для обслуживания небольших выделений, и строки, скорее всего, попадают в эту категорию. Но это зависит от реализации, а не исключительно для или оптимизировано для std::string s .. .).

2 голосов
/ 10 марта 2011

разные экземпляры c ++ используют один и тот же распределитель, если вы его не указали. Возможно, вы имеете в виду интернирование строк, стандартное для java / python и т. Д. Если это так, то нет. Для этого нет «стандартного» средства. Однако это легко добавить, если частое создание / уничтожение является проблемой

http://en.wikipedia.org/wiki/String_interning

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