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

62 байта убрано ,  5 лет назад
м
замена категории на шаблон для работы полки, removed: Категория:Программирование с помощью AWB
(http://www.boost.org/doc/)
м (замена категории на шаблон для работы полки, removed: Категория:Программирование с помощью AWB)
 
=== Структура библиотеки и зависимости ===
Форвард-декларации всех доступных символов библиотеки находятся в заголовочном файле, включаемым с помощью <br /> <code>#include <boost/pool/poolfwd.hpp></code>
 
Библиотека использует макросы с префиксом BOOST_POOL_. Исключениями из этого правила являются стражи заголовочных файлов (the include file guards), которые представляю собой (для файла xxx.hpp) BOOST_xxx_HPP. Все символы, предоставляемые библиотекой, определены в пространстве имен boost::. Символы, используемые реализацией библиотеки находятся в пространстве имен boost::details::pool. <br />
Вы можете использовать Boost.Pool в виде Object или как Singleton. При использовании в виде ''Object'' вы каждый Pool создаете в виде отдельного индивидуального объекта, который может быть явно создан или уничтожен в любой удобный для вас момент. При этом уничтожение такого Pool неявно освобождает всю ранее выделенную память.<br />
При использовании Boost.Pool в виде ''Singleton'' вы создаете каждый Pool в виде статического объекта. При этом созданием и удалением такого Boost.Pool вы не управляете - он создается перед началом программы и удаляется после ее завершения. Boost.Pool, основанные на применении ''Singleton'' могут быть разделяемыми (shared), что неявно подразумевает потокобезопасность (implies thread-safety).
Системная память, выделенная объектом Boost.Pool в виде ''Singleton'' при необходимости может быть освобождена до завершения программы с помощью ''release_memory'' или ''purge_memory''.<br />
 
==== Нехватка памяти (Out-of-memory): Исключения или возврат Null ====
Обратите внимание, что существуют различные внутренние pool p для различных сочетаний параметров шаблона, включая специализации зависящие от реализации.
 
'''''Параметры шаблона''''' <br />
 
''Tag'' позволяет сосуществовать различным неограниченным наборам singleton pools (different unbounded sets of singleton pools). Например, аллокатор интерфейса pool использует два класса Tag для гарантии, что два различных типа аллокатора никогда не будут совместно использовать один и тот же внутренний pool.<br />
В действительности Tag никогда не используется  singleton_pool.<br />
 
''RequestedSize'' Размер блока памяти выделяемой из системы для данного pool. Передается как параметр конструктора внутренней реализации pool. Должен быть больше чем 0.
 
==== pool_allocator ====
Интерфейсный класс  pool_allocator  реализует подход с использованием Singleton и Exceptions. Он построен на основе интерфейсного класса singleton_pool и является совместимым со стандартным аллокатором (для использования в контейнерах, например).<br />
 
'''''Введение'''''<br />
Для подробной информации о других интерфейсных классах, основанных на pool, смотрите [[Boost.Pool#Интерфейсные классы Pool|Интерфейсные классы Pool]].
 
'''''Синопсис''''' <br />
 
<source lang="cpp">
};</source>
 
'''''Параметры шаблона''''' <br />
 
''T'' первый параметр шаблона представляет собой тип объекта, для которого выделяется/освобождается память.<br />
[[к сожалению в оригинале данные ссылки неверны]]
 
'''''Динамическое выделение памяти часто неэффективно''''' <br />
 
Благодаря своей сложности динамическое выделение памяти зачастую оказывается неэффективным в плане быстродействия или расхода памяти. Большинство алгоритмов динамического выделения памяти хранят некоторую информацию о каждом блоке памяти, будь то размер этого блока или какая-либо другая информация вроде позиции данного блока во внутреннем дереве или списке (хранящих информацию о всех блокам памяти).
Это следует из Утверждений 1 и 2, и следующей цитаты:
 
[3.9/9] (Основные концепции::Типы) "Объектный тип является (возможно cv-qualified) типом, не являющимся функциональным типом, ссылочным типом, или типом void." <br />
 
(Конкретнее, типы массивов являются объектными типами)
[[Файл:Boost.Pool Memory block example 2.PNG|1000px|thumb|center]]
 
 
[[Категория:Программирование]]
 
[[Категория:{{Темы|Программирование]]}}
531

правка