// In header: <boost/interprocess/allocators/adaptive_pool.hpp>
template<typename T,typename SegmentManager,std::size_t NodesPerBlock,std::size_t MaxFreeBlocks,unsignedchar OverheadPercent>classadaptive_pool{public:// typestypedefimplementation_defined::segment_managersegment_manager;typedefsegment_manager::void_pointervoid_pointer;typedefimplementation_defined::pointerpointer;typedefimplementation_defined::const_pointerconst_pointer;typedefTvalue_type;typedefunspecifiedreference;typedefunspecifiedconst_reference;typedefsegment_manager::size_typesize_type;typedefsegment_manager::difference_typedifference_type;// member classes/structs/unionstemplate<typename T2>structrebind{// typestypedefadaptive_pool<T2,SegmentManager,NodesPerBlock,MaxFreeBlocks,OverheadPercent>other;};// construct/copy/destructadaptive_pool(segment_manager*);adaptive_pool(constadaptive_pool&);template<typename T2>adaptive_pool(constadaptive_pool<T2,SegmentManager,NodesPerBlock,MaxFreeBlocks,OverheadPercent>&);template<typename T2,typename SegmentManager2,std::size_t N2,std::size_t F2,unsignedchar OP2>adaptive_pool&operator=(constadaptive_pool<T2,SegmentManager2,N2,F2,OP2>&);~adaptive_pool();// public member functionsvoid*get_node_pool()const;segment_manager*get_segment_manager()const;size_typemax_size()const;pointerallocate(size_type,cvoid_pointer=0);voiddeallocate(constpointer&,size_type);voiddeallocate_free_blocks();pointeraddress(reference)const;const_pointeraddress(const_reference)const;size_typesize(constpointer&)const;pointerallocation_command(boost::interprocess::allocation_type,size_type,size_type&,pointer&);voidallocate_many(size_type,size_type,multiallocation_chain&);voidallocate_many(constsize_type*,size_type,multiallocation_chain&);voiddeallocate_many(multiallocation_chain&);pointerallocate_one();voidallocate_individual(size_type,multiallocation_chain&);voiddeallocate_one(constpointer&);voiddeallocate_individual(multiallocation_chain&);// friend functionsfriendvoidswap(self_t&,self_t&);};
Description
Аллокатор узла STL, который использует менеджер сегментов в качестве источника памяти. Внутренний тип указателя будет того же типа (сырой, умный), что и тип «типовое имя SegmentManager::void_pointer». Это позволяет разместить распределитель в общей памяти, карт памяти-файлы и т.д.
Этот распределитель узлов разделяет сегрегированное хранилище между всеми экземплярамиadaptive_poolс равным размером (T), помещенным в одну и ту же группу сегментов. Узлы PerBlock - это количество узлов, выделенных одновременно, когда у распределителя заканчивается количество узлов. MaxFreeBlocks - это максимальное количество полностью свободных блоков, которые будет поддерживать бассейн адаптивных узлов. Остальные свободные блоки будут размещены у менеджера сегмента.
OverheadPercent - максимальный размер накладных расходов (1-20%) распределителя: (память, используемая для узлов / общая память, выделенная из менеджера сегмента)
adaptive_pool
public
construct/copy/destruct
<
adaptive_pool(segment_manager*segment_mngr);
>
Не присваивается другим<adaptive_pool>Конструктором от менеджера сегмента. Если его нет, то строится узел. Увеличивает количество ссылок на соответствующий пул узлов. Может бросать<boost::interprocess::bad_alloc>
Копировать конструктор из родственных<adaptive_pool>. Если его нет, то строится узел. Увеличивает количество ссылок на соответствующий пул узлов. Способен к броску<boost::interprocess::bad_alloc>
Возвращает адрес изменяемого объекта. Никогда не бросайте
<
const_pointeraddress(const_referencevalue)const;
>
Возвращает адрес неизменяемого объекта. Никогда не бросайте
<
size_typesize(constpointer&p)const;
>
Возвращает максимальное количество объектов, которые может удерживать ранее выделенная память, указанная p. Этот размер работает только для памяти, выделенной с выделением, выделением_командой и выделением_многими.
Выделяет множество элементов размера elem_size в смежный блок памяти. Минимальное число, которое должно быть выделено, - это min_элементы, предпочтительное и максимальное число - предпочтительные_элементы. Количество фактически выделенных элементов будет присвоено для receive_size. Элементы должны быть размещены с помощью соглашения (...)
Выделяет элементы n_элементов, каждый из которых размером elem_sizes[i] в смежный блок памяти. Элементы должны быть размещены
.
<
voiddeallocate_many(multiallocation_chain&chain);
>
Выделяет множество элементов размера elem_size в смежный блок памяти. Минимальное число, которое должно быть выделено, - это min_элементы, предпочтительное и максимальное число - предпочтительные_элементы. Количество фактически выделенных элементов будет присвоено для receive_size. Элементы должны быть размещены с помощью соглашения (...)
<
pointerallocate_one();
>
Выделяют только один объект. Память, выделенная с этой функцией, должна быть размещена только с помощью deallocate_one(). Бросает<boost::interprocess::bad_alloc>, если не хватает памяти
Выделяет множество элементов размера == 1 в смежном блоке памяти. Минимальное число, которое должно быть выделено, - это min_элементы, предпочтительное и максимальное число - предпочтительные_элементы. Количество фактически выделенных элементов будет присвоено для receive_size. Память, выделенная с этой функцией, должна быть размещена только с помощью deallocate_one().
<
voiddeallocate_one(constpointer&p);
>
Выделяет память, ранее выделенную с выделением_one(). Вы никогда не должны использовать deallocate_one для обработки памяти, выделенной с другими функциями, отличными от allocate_one(). Никогда не бросайте
Выделяет множество элементов размера == 1 в смежном блоке памяти. Минимальное число, которое должно быть выделено, - это min_элементы, предпочтительное и максимальное число - предпочтительные_элементы. Количество фактически выделенных элементов будет присвоено для receive_size. Память, выделенная с этой функцией, должна быть размещена только с помощью deallocate_one().
adaptive_pool friend functions
<
friendvoidswap(self_t&alloc1,self_t&alloc2);
>
Распределители свопов. Не бросает. Если каждый распределитель помещается в отдельный сегмент памяти, результат не определен.
Статья Class template adaptive_pool раздела The Boost C++ Libraries BoostBook Documentation Subset Indexes and Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.