boost::object_pool — A template class that can be used for fast and efficient memory allocation of objects. It also provides automatic destruction of non-deallocated objects.
TТип объекта для выделения/выделения. Т должен иметь небросающий деструктор.
ПользовательОпределяет распределитель, который базовый пул будет использовать для выделения памяти из системы. Видишь?Распределители пользователейдля деталей.
Классobject_pool— это класс шаблонов, который можно использовать для быстрого и эффективного распределения памяти объектов. Он также обеспечивает автоматическое уничтожение неразрушенных объектов.
Когда объектный пул разрушается, то деструктор для типа Т вызывается для каждого выделенного Т, который еще не был размещён. O(N).
Всякий раз, когда объект типа ObjectPool нуждается в памяти системы, он запрашивает ее из своего параметра шаблона UserAllocator. Запрашиваемое количество определяется с помощью алгоритма удвоения, то есть каждый раз, когда выделяется больше системной памяти, количество запрашиваемой системной памяти удваивается. Пользователи могут управлять алгоритмом удвоения по параметрам, переданным конструкторуobject_pool.
Основной прирост:бассейнхранилище, используемое * этим.
object_pool protected static functions
<
staticvoid*&nextof(void*constptr);
>
Возвращение:
Следующий блок памяти после ptr (ради читабельности кода :)
object_pool public member functions
<
element_type*malloc();
>
Выделяет память, способную удерживать один объект типа ElementType.
Если память не работает, возвращается 0.
Амортизированный O(1).
<
voidfree(element_type*constchunk);
>
Распределяет память, которая содержит фрагмент типа ElementType.
Обратите внимание, что p не может быть 0. Обратите внимание, что деструктор для p не вызывается. O(N).
<
boolis_from(element_type*constchunk)const;
>
Возврат ложный, если кусок был выделен из какого-либо другого пула или может быть возвращен в результате будущего распределения из какого-либо другого пула.
В противном случае возвращаемое значение бессмысленно.
Примечание
Эта функция НЕ может использоваться для надежного тестирования значений случайных указателей!
Возврат:
верно, если кусок был выделен из * этого или может быть возвращен в результате будущего распределения из * этого.
<
element_type*construct();
>
Возвращает:
Указатель на объект типа T, выделенный в памяти из базового пула и построенный по умолчанию. Возвращенный объект может быть освобожден призывом к уничтожению. В противном случае возвращенный объект будет автоматически уничтожен, когда это будет уничтожено.
Поскольку число и тип аргументов для этой функции совершенно произвольны, была настроена простая система для автоматического создания функций построения шаблонов. Эта система основана на макропроцессоре m4, который является стандартным для систем UNIX, а также доступен для систем Win32.
Detail/pool_construct.m4, при запуске с m4, будет создавать файл Detail/pool_construct.ipp, который только определяет функции построения для правильного количества аргументов. Количество аргументов может быть передано в файл в виде макроса m4, NumberOfArguments; если не предусмотрено, он будет по умолчанию 3.
Для каждого различного числа аргументов (от 1 до NumberOfArguments) генерируется функция шаблона. Существует такое же количество параметров шаблона, как и аргументов, и тип каждого аргумента является ссылкой на этот (возможно, cv-квалифицированный) аргумент шаблона. Также генерируется каждая возможная перестановка квалификаций cv.
Поскольку каждая перестановка генерируется для каждого возможного числа аргументов, размер файла растет экспоненциально с точки зрения количества аргументов конструктора, а не линейно. Для рационального составления времен используйте только столько аргументов, сколько вам нужно.
Detail/pool_construct.bat и Detail/pool_construct.sh также предоставляются для вызова m4, определяя NumberOfArguments как их параметр командной строки. Посмотрите эти файлы для более подробной информации.
Возврат:
Указатель на объект типа T, выделенный в памяти из базового пула и построенный из аргументов Arg1 в ArgN. Возвращенный объект может быть освобожден призывом к уничтожению. В противном случае возвращенный объект будет автоматически уничтожен, когда это будет уничтожено.
<
voiddestroy(element_type*constchunk);
>
Уничтожает объект, выделенный конструкцией.
Эквивалентно:
p->~ElementType(); this->free(p);
Требуется:
p должно быть предварительно выделено из * этого посредством вызова на конструкцию.
<
size_typeget_next_size()const;
>
Возвращение:
Количество кусков, которые будут выделены в следующий раз, когда у нас закончится память.
<
voidset_next_size(constsize_typex);
>
Установите новое количество кусков, чтобы выделить в следующий раз, когда у нас закончится память.
Параметры:
<x>
хотели следующего размера (не должно быть нуля).
Статья Class template object_pool раздела Boost.Pool Header <boost/pool/poolfwd.hpp> может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.