Каждый ресурс владеет выделенной памятью и освобождает её от разрушения, даже если для некоторых выделенных блоков не был вызван деллокат.
Ресурс пула состоит из набора пулов, обслуживающих запросы на различные размеры блоков. Каждый отдельный бассейн управляет коллекцией кусков, которые в свою очередь делятся на блоки однородного размера, возвращаемые с помощью вызовов do_allocate. Каждый вызов do_allocate (размер, выравнивание) отправляется в пул, обслуживающий наименьшие блоки, вмещающие по меньшей мере байты размера.
Когда конкретный бассейн исчерпан, выделение блока из этого бассейна приводит к выделению дополнительного куска памяти из распределителя вверх по течению (поставляемого при строительстве), таким образом пополняя бассейн. С каждым последующим пополнением полученный размер куска увеличивается геометрически. [Примечание: распределяя память по частям, стратегия объединения увеличивает вероятность того, что последовательные распределения будут близки друг к другу в памяти. - конец примечания ]
Запросы распределения, превышающие наибольший размер блока любого пула, выполняются непосредственно из распределителя вверх по течению.
Структураpool_optionsможет быть передана конструкторам ресурсов пула для настройки наибольшего размера блока и максимального размера фрагмента.
Ксинхронизированному_pool_ресурсуможно получить доступ из нескольких потоков без внешней синхронизации и может иметь специфичные для потоков пулы для снижения затрат на синхронизацию.
synchronized_pool_resource
public
construct/copy/destruct
synchronized_pool_resource public member functions
voidrelease();
Эффекты: Звонки Звонкиupstream_resource()->deallocate()по мере необходимости для освобождения всей выделенной памяти. [Примечание: память высвобождается обратно вupstream_resource(), даже если для некоторых выделенных блоков не было вызвано соглашение. - конец примечания ]
Возвращение: Индекс пула, который будет использоваться для обслуживания распределенияbytes. Возвратpool_count(), еслиbytesбольшеoptions().largest_required_pool_block(для этого не будет использоваться бассейн).
Статья Class synchronized_pool_resource раздела The Boost C++ Libraries BoostBook Documentation Subset Boost.Container Header Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.