Boost.Pool: различия между версиями

Содержимое удалено Содержимое добавлено
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/1_48_0release/libs/pool/doc/html/index.html Boost::Pool] в частности.
 
== Введение ==
 
 
 
=== Что такое 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'' <br />
[[Boost.Pool#pool|pool]] <br />
* [[Boost.Pool#Object_poolpool|Object_poolpool]] <br />
* [[Boost.Pool#Singleton_poolObject_pool|Singleton_poolObject_pool]] <br />
* [[Boost.Pool#pool_allocatorSingleton_pool|pool_allocatorSingleton_pool]] <br />
* [[Boost.Pool#pool_allocator|pool_allocator]]
 
=== Введение ===
Строка 73 ⟶ 68 :
 
=== Интерфейсы Pool ===
* [[Boost.Pool#pool|pool]] <br />
* [[Boost.Pool#Object_pool|Object_pool]] <br />
* [[Boost.Pool#Singleton_pool|Singleton_pool]] <br />
* [[Boost.Pool#pool_allocator|pool_allocator]] <br />
 
==== 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 />
 
 
'''''Параметры шаблона''''' <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