<allocators>
Определяет несколько шаблонов, упрощающих выделение и освобождение блоков памяти для контейнеров на основе узлов.
#include <allocators>
Заметки
<allocators> Заголовок содержит 6 шаблонов распределителя, которые можно использовать для выделения стратегии управления памятью для контейнеров на основе узлов. Для использования с этими шаблонами он также предоставляет несколько различных фильтров синхронизации настраивать стратегии управления памятью для различных различным схемам многопоточности (включая отсутствует). Соответствия стратегии управления памятью в известным шаблоны потребления памяти и требованиями к синхронизации, определенного приложения часто может увеличивать или уменьшать скорость общие требования к памяти приложения.
Шаблоны распределителя реализованы с многоразовыми компонентами, которые можно настраивать или заменить, чтобы предоставить дополнительные стратегии управления памятью.
Контейнеры после внесения зависимости в стандартной библиотеке C++ (C std::list, std::set, std::multiset, std::map и std::multimap) хранят их элементы на отдельных узлах. Все узлы для определенного типа контейнера одного размера, поэтому гибкость общецелевого диспетчера памяти не требуется. Поскольку размер каждого блока памяти известен во время компиляции, диспетчер памяти может быть гораздо проще и быстрее.
При использовании с контейнерами, не после внесения зависимости (например, стандартное std::deque std::vector контейнеров библиотеки C++, std::basic_string), шаблоны alllocator будут работать правильно, но не могут для предоставления любое улучшение производительности по сравнению с распределителем по умолчанию.
Распределитель класса шаблона, который описывает объект, который управляет выделение и освобождение памяти для объектов и массивов объектов разрешенного типа. Объекты распределителя используются несколькими шаблонных классов контейнера в стандартной библиотеке C++.
Распределителей все шаблоны данного типа:
template<class Type>
class allocator;
, где аргумент Type шаблона тип является управляемым экземпляром распределителя. Стандартная библиотека C++ C предоставляет распределитель по умолчанию, шаблонный класс allocator, который содержится в разделе <memory>. <allocators> Заголовок предоставляет следующие распределителей:
Используйте подходящее создание распределителя в качестве второго аргумента типа создание контейнера, например, в следующем примере кода.
#include <list>
#include <allocators>
std::list<int, stdext::allocators::allocator_chunklist<int> > _List0;
_List0 выделяет узлы с allocator_chunklist и фильтром синхронизации по умолчанию.
Следует использовать макрос ALLOCATOR_DECL (<allocators>) для создания шаблонов распределителя с фильтрами синхронизации, отличный от принятого по умолчанию:
#include <list>
#include <allocators>
ALLOCATOR_DECL(CACHE_CHUNKLIST, stdext::allocators::sync_per_thread, Alloc);
std::list<int, alloc<int> > _List1;
_Lst1 выделяет узлы с allocator_chunklist и фильтром синхронизации synchronization_per_thread.
Распределитель блока кэш или фильтр. Кэш класса шаблона, который принимает один аргумент std::size_t типа. Он определяет распределитель блока, выделение и отменить блоки памяти одного размера. Он должен получить память с помощью оператора new, но для этого не требуется выполнять отдельно к оператору new для каждого блока. Он может, например, дополнительного выделения памяти большего блока или отмененных распределение кэшем блоков для дальнейшего распространения.
С компилятором, не может компилировать rebind значение аргумента std::size_t, когда был создан экземпляр шаблона не обязательно _Sz значение аргумента, передаваемого в функциям элемента кэша выделяет и отмены.
<allocators> предоставляет следующие шаблоны кэша:
Фильтр распределитель блока, реализующий его функции-члены с использованием другого блока распределитель, передаваемых в качестве аргумента шаблона. Наиболее распространенной формой фильтра фильтр синхронизации, который применяет политику синхронизации с доступом элемента управления к функциям элемента экземпляра другого распределителя блока. <allocators> предоставляет следующие фильтры синхронизации.
<allocators> также предоставляет фильтр rts_alloc, который содержит несколько экземпляров распределителя блока и определяет, какой экземпляр, используемый для выделения или освобождение во время выполнения, а не во время компиляции. Используется с компиляторами, не может компилировать rebind.
Политика синхронизации определяет, как экземпляр распределителя выполняет одновременных запросов на выделение и освобождение из нескольких потоков. Самая простая политика передавать все запросы непосредственно через к базовому объекту кэша, и управление синхронизацией пользователю. Более сложная политика мьютекс может быть использован для сериализации доступ к базовому объекту кэша.
Если поддержки компилятора при компилировании с одним и продели потоков и многопоточных приложений, то фильтр синхронизации по умолчанию для одного несколькими потоками приложений sync_none; во все другие случаи это sync_shared.
Шаблон cache_freelist кэша максимальный принимает аргумент класса, максимальное количество элементов, сохраняемых в свободном списке.
<allocators> максимальное количество предоставляет следующие классы:
Макросы
Создает класс шаблона распределителя. |
|
Создает stdext::allocators::cache_chunklist<sizeof(Type)>. |
|
Создает stdext::allocators::cache_freelist<sizeof(Type), max>. |
|
Создает stdext::allocators::cache_suballoc<sizeof(Type)>. |
|
Создает фильтр синхронизации. |
Операторы
Проверяет на неравенство между объектами распределителя указанного класса. |
|
Проверяет на равенство объекты распределителя указанного класса. |
Классы
Определяет базовый класс и общие функции, необходимые для создания определенного пользователем распределитель из фильтра синхронизации. |
|
Описывает объект, который управляет выделение и освобождение памяти для кэширования типа объектов с помощью cache_chunklist. |
|
Описывает объект, который управляет выделение и освобождение памяти для объектов типа Type использование кэша управлянная длина типа cache_freelist с max_fixed_size. |
|
Реализует распределитель, использующий operator delete для отмены блок памяти и operator new, чтобы выделить блок памяти. |
|
Описывает объект, который управляет выделение и освобождение памяти для объектов типа Type использование кэша типа cache_suballoc. |
|
Описывает объект, который управляет выделение и освобождение памяти для объектов типа Type использование кэша управлянная длина типа cache_freelist с max_unbounded. |
|
Описывает объект, который управляет выделение и освобождение памяти для объектов типа Type использование кэша управлянная длина типа cache_freelist с max_variable_size. |
|
Определяет распределитель блока, выделение и отменить блоки памяти одного размера. |
|
Определяет распределитель блока, выделение и отменить блоки памяти одного размера. |
|
Определяет распределитель блока, выделение и отменить блоки памяти одного размера. |
|
Управляет списком блоков памяти. |
|
Описывает максимальный объект класса, ограничения объект freelist в фиксированной максимальной длины. |
|
Описывает максимальный объект класса, ограничения объект freelist в максимальная длина ноль. |
|
Описывает максимальный объект класса, не ограничивает максимальную длину объекта freelist. |
|
Описывает максимальный объект класса, ограничения объект freelist с максимальной длины, быть пропорционально количеству блоков выделения памяти. |
|
Класс шаблона rts_alloc описание фильтр, который содержит массив экземпляров кэша и определяет, какой экземпляр, используемый для выделения и освобождение во время выполнения, а не во время компиляции. |
|
Описывает фильтр синхронизации, не предоставляет какой-либо синхронизации. |
|
Описывает фильтр синхронизации, предоставляет отдельный объект кэша для каждого объекта распределителя. |
|
Описывает фильтр синхронизации, предоставляет отдельный объект кэша для каждого потока. |
|
Описывает фильтр синхронизации, используется мьютекс с доступом элемента управления объект кэша, совместно используемый всеми распределителями. |
Требования
Заголовок:<allocators>
Пространство имен: stdext