Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Header <boost/pool/pool_alloc.hpp>

Boost , Boost.Pool , Boost.Pool C++ Reference

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

C++ Стандартные библиотечные совместимые распределители на основе пула.

Этот заголовок предоставляет два типа шаблонов - pool_allocator и fast_pool_allocator - которые могут использоваться для быстрого и эффективного распределения памяти в сочетании с C++. Стандартные библиотечные контейнеры.

Эти типы удовлетворяют требованиям стандартного распределителя [20.1.5] и дополнительным требованиям [20.1.5/4], поэтому их можно использовать либо в стандартных, либо в пользовательских контейнерах.

Кроме того, Fast_pool_allocator также обеспечивает дополнительное распределение и дополнительную функцию распределения сделок:

Выражение Тип возвратаСемантическая эквивалентность
PoolAlloc::allocate()T*PoolAlloc::allocate(1)<1 
PoolAlloc::deallocate(p)пустойPoolAlloc::deallocate(p, 1) 

User_allocator публикует значение параметра шаблона UserAllocator.

Примечания

Если функции распределения исчерпают память, они бросят std::bad_alloc.

Базовый тип пула, используемый распределителями, доступен через интерфейс пула Синглтона. Идентифицирующим тегом, используемым для pool_allocator, является pool_allocator_tag, а тегом, используемым для fast_pool_allocator, является fast_pool_allocator_tag. Все шаблонные параметры распределителей (включая специфичные для реализации) определяют тип базового пула, за исключением первого параметра T, размер которого используется вместо него.

Поскольку размер T используется для определения типа базового пула, каждый распределитель для разных типов одного и того же размера будет иметь один и тот же базовый пул. Класс тегов предотвращает совместное использование пулов между pool_allocator и fast_pool_allocator. Например, в системе, где sizeof(int) == sizeof(void*), pool_allocator и pool_allocator будут выделять/распределять из/в один и тот же пул.

Если перед началом основного() и после окончания основного() ходит только одна нить, то оба распределителя полностью безвредны.

Компилятор и примечания STL

Ряд распространенных библиотек STL содержат ошибки в использовании распределителей. В частности, они передают нулевые указатели на функцию распределения, которая явно запрещена стандартом [20.1.5 Таблица 32]. PoolAlloc будет работать с этими библиотеками, если обнаружит их; в настоящее время существуют обходные пути для: Borland C++ (Строитель и компилятор командной строки) с библиотекой по умолчанию (RogueWave), ver. 5 и более ранний, STLport (с любым компилятором), ver. 4.0 и более ранний.

namespace boost {
  struct pool_allocator_tag;
  template<typename UserAllocator, typename Mutex, unsigned NextSize, 
           unsigned MaxSize> 
    class pool_allocator<void, UserAllocator, Mutex, NextSize, MaxSize>;
  struct fast_pool_allocator_tag;
  template<typename UserAllocator, typename Mutex, unsigned NextSize, 
           unsigned MaxSize> 
    class fast_pool_allocator<void, UserAllocator, Mutex, NextSize, MaxSize>;
}

PrevUpHomeNext

Статья Header <boost/pool/pool_alloc.hpp> раздела Boost.Pool Boost.Pool C++ Reference может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Boost.Pool C++ Reference ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 16:57:45/0.0039770603179932/0