Как стать автором
Обновить

Комментарии 2

Полиморфные аллокаторы интересны для оптимизаций выделения памяти «на куче». Например, через них можно сделать аллокации в арене (как protobuf arena) и очистить всю память разом, освободив арену.

Один момент, который смущает — это хранение указателя на аллокатор в каждом объекте. Для контейнеров такой overhead может быть незаметен, а вот для строк — это плюс одна треть к размеру объекта. Вот думаю, можно ли провести оптимизация: хранить указатель на аллокатор в статической области памяти (thread_local). И перед работой с контейнером назначать этот указатель на необходимый аллокатор. Есть ли у кого подобный опыт?
А разве старый тип std::basic_string не хранил аллокатор, который был указан в шаблоне?
Плюс с размером там не все так однозначно — в некоторых реализациях делают буфер прямо в самой переменной, чтобы короткие строки не ходили за памятью в кучу.
И вообще всегда можно было взять старый тип и специализировать его типом аллокатора, который как раз и ходит в thread storage, чтобы получить инстанс алокатора для текущего треда.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.