Эффективные памятью строки C++ (интернирование, веревки, копия на записи, и т.д.) [закрытый]

Взгляд Boehm GC широко используемый консервативный сборщик "мусора" для C (или C++), который мог бы удовлетворить Ваши потребности до умного управления памятью, затронут.

12
задан Paul Biggar 12 July 2009 в 13:31
поделиться

4 ответа

Если большинство ваших строк неизменяемо, библиотека Boost Flyweight может удовлетворить ваши потребности.

Она выполнит интернирование строк, но я в это не верю копирует при записи.

6
ответ дан 2 December 2019 в 07:03
поделиться

Андрея Александреску ' Реализация basic_string на основе политик 'может помочь.

5
ответ дан 2 December 2019 в 07:03
поделиться

Take a look at The Better String Library from legendary Paul Hsieh

2
ответ дан 2 December 2019 в 07:03
поделиться

копирование при записи (я думаю, что это предоставляется бесплатно почти во всех реализациях std :: string)

Я больше не верю, что это так. Копирование при записи вызывает проблемы, когда вы изменяете строки с помощью итераторов: в частности, это вызывает либо нежелательные результаты (т. Е. Отсутствие копирования, и обе строки изменяются), либо ненужные накладные расходы (поскольку итераторы не могут быть реализованы исключительно в терминах указателей). : им необходимо выполнить дополнительные проверки при разыменовании).

Кроме того, все современные компиляторы C ++ выполняют NRVO и в большинстве случаев исключают необходимость копирования строк возвращаемых значений. Поскольку это был один из наиболее распространенных случаев семантики копирования при записи, он был удален из-за вышеупомянутых недостатков.

9
ответ дан 2 December 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: