Description
Singleton_poolКласс позволяет другим интерфейсам пула для типов того же размера совместно использовать тот же пул. Параметры шаблонов следующие:
ТегТип, определенный пользователем, чтобы однозначно идентифицировать этот пул: позволяет существовать различным неограниченным наборам одиночных пулов.
Запрошенный размерРазмер каждой части, возвращаемой функцией члена<malloc()
>.
UserAllocatorUser Allocator, default =default_user_allocator_new_delete.
МутексЭтот класс является типом mutex для защиты одновременного доступа к базовому бассейну. Может быть любой рост. мутексный тип или<boost::details::pool::null_mutex
>. Он выставляется таким образом, что пользователи могут объявлять некоторые однотонные пулы обычно (т.е. с синхронизацией), но некоторые однотонные пулы без синхронизации (путем указания<boost::details::pool::null_mutex
>) по соображениям эффективности. Член typedef<mutex
>раскрывает значение этого шаблонного параметра. По умолчанию для этого параметра есть boost::details::pool::default_mutex который является синонимом либо<boost::details::pool::null_mutex
>(когда поддержка потоков выключена в компиляторе (так что BOOST_HAS_THREADS не установлен), либо поддержка потоков явно отключена с BOOST_). Недопустимые_твари (Широкое отключение потоков) или BOOST_POOL_NO_MT (только эта библиотека) или для<boost::mutex
>(при включенной поддержке потоков в компиляторе).
NextSizeЗначение этого параметра передается в базовый пул при его создании и указывает количество кусков для выделения в первом запросе на выделение (по умолчанию 32). Typedef<static const value next_size
>раскрывает значение этого шаблонного параметра.
MaxSizeЗначение этого параметра передается в базовый пул при его создании и указывает максимальное количество кусков для выделения в любом отдельном запросе на выделение (по умолчанию 0).
Примечания:
Базовый пулp, на который ссылаются статические функции вsingleton_pool, фактически объявляется таким образом, что:
1 1 Безопасен, если перед началом main() и после окончания main() запущена только одна нить; все статические функцииsingleton_poolсинхронизируют их доступ к p.
2 2 Гарантируется, что он будет построен до его использования и No 8211; таким образом, простой статический объект в приведенном выше синопсисе будет фактически неправильной реализацией. Реальная реализация, чтобы гарантировать это значительно сложнее.
3 Также обратите внимание, что для каждого набора параметров шаблона существует различный базовый пул p, включая параметры, специфичные для реализации.
4.4 Базовый бассейн построен «как будто»:
poolp(RequestedSize, NextSize, MaxSize);
![[Note]](/img/note.png) | Note |
---|
Бассейн, построенный одиночкой, никогда не освобождается. Это означает, что память, выделеннаяsingleton_pool, может по-прежнему использоваться после завершения main(), но может означать, что некоторые программы проверки памяти будут жаловаться на утечки изsingleton_pool. |
singleton_pool
public
construct/copy/destruct
singleton_pool
public static functions
Эквивалент в Бассейне Синглтона::p.malloc(); синхронизировано.
[ORIG_END] -->Эквивалентный SingletonPool::p.ordered_malloc(); синхронизированный.
[ORIG_END] -->Эквивалентный в SingletonPool::p.ordered_malloc(n); синхронизированный.
[ORIG_END] -->staticboolis_from(void*constptr);
Эквивалент SingletonPool::p.is_from(chunk); синхронизированный.
Возвращение: | истинно, если кусок из SingletonPool::is_from |
staticvoidfree(void*constptr);
Эквивалент SingletonPool::p.free(chunk); синхронизированный.
staticvoidordered_free(void*constptr);
Эквивалент SingletonPool::p.ordered_free(chunk); синхронизированный.
staticvoidfree(void*constptr,constsize_typen);
Эквивалент SingletonPool::p.free(chunk, n); синхронизированный.
Эквульвалент SingletonPool::p.ordered_free(chunk, n); синхронизация.
[ORIG_END] -->Эквивалент SingletonPool::p.release_memory(); синхронизированный.
[ORIG_END] -->staticboolpurge_memory();
Эквивалент SingletonPool::p.purge_memory(); синхронизированный.
singleton_pool
private static functions
- <
staticpool_type&get_pool();
>