Boost.Pool: различия между версиями
Содержимое удалено Содержимое добавлено
Oleg4280 (обсуждение | вклад) |
Oleg4280 (обсуждение | вклад) http://www.boost.org/doc/libs/release/libs/pool/doc/html/index.html (ссылка на последнюю версию документации, было 1.48, а стало 1.57) и оформление |
||
Строка 1:
Назначение учебника в популяризации применения библиотеки Boost вообще и [http://www.boost.org/doc/libs/
== Введение ==
=== Что такое Pool? ===
Строка 12 ⟶ 10 :
Применение Pools дает вам больше контроля над использованием памяти в вашей программе. Например, у вас может быть ситуация, когда вы выделяете несколько небольших объектов в одном месте и затем в определенный момент они вам становятся не нужны. Используя Pool, вы можете либо вызвать деструкторы всех этих объектов, либо просто удалить их из памяти; при этом Pool гарантирует отсутствие утечек памяти.
=== Когда нужен Pool? ===
Строка 18 ⟶ 15 :
Pools используется при частом создании и удалении небольших объектов. Другой вариант описан в предыдущем параграфе, когда необходимо одновременно удалить множество объектов из памяти.
В общем случае, используйте Pools когда вам нужен более эффективное (нестандартное) управление памятью.
=== Какой аллокатор лучше всего? ===
Строка 47 ⟶ 42 :
Осуществляется с помощью jamfile.v2, который запускается обычным способом, например:
boost\libs\pool\test> bjam -a >pool_test.log
== Интерфейсные классы Boost Pool — Какие классы существуют и когда их использовать. ==
''Интерфейсные классы Pool''
* [[Boost.Pool#
* [[Boost.Pool#
* [[Boost.Pool#
* [[Boost.Pool#pool_allocator|pool_allocator]]
=== Введение ===
Строка 73 ⟶ 68 :
=== Интерфейсы Pool ===
* [[Boost.Pool#pool|pool]]
* [[Boost.Pool#Object_pool|Object_pool]]
* [[Boost.Pool#Singleton_pool|Singleton_pool]]
* [[Boost.Pool#pool_allocator|pool_allocator]]
==== pool ====
Интерфейсный класс pool реализует собой подход с применением Object, возвращающий Null при нехватке памяти.
Строка 137 ⟶ 133 :
void ordered_free(void * chunks, size_type n);
};
Например:
void func()
Строка 234 ⟶ 231 :
*является потокобезопасным (thread-safe) если только один поток (thread) выполняется до начала функции main() и после ее окончания. Все статические функции singleton_pool синхронизируют свой доступ к p.
*гарантируется, что конструирование объекта будет завершено перед его первым использованием, поэтому простой статический объект приведенный в синопсисе является некорректной реализацией. Чтобы гарантировать данную возможность, реальная реализация выполнена значительно более сложной.
Обратите внимание, что существуют различные внутренние pool p для различных сочетаний параметров шаблона, включая специализации зависящие от реализации.
'''''Параметры шаблона''''' <br />
Строка 262 ⟶ 258 :
}
</source>
==== pool_allocator ====
Интерфейсный класс pool_allocator реализует подход с использованием Singleton и Exceptions. Он построен на основе интерфейсного класса singleton_pool и является совместимым со стандартным аллокатором (для использования в контейнерах, например).<br />
Строка 360 ⟶ 357 :
static void deallocate(pointer ptr);
};</source>
'''''Параметры шаблона''''' <br />
Строка 488 ⟶ 484 :
[[Файл:Boost.Pool Memory block example 1.PNG|1000px|thumb|center]]
Чтобы показать пример возможного выравнивания, приведем пример блока памяти, где requested_size == 8 и sizeof(void *) == sizeof(size_type) == 4
|