Поделиться через


<allocators>

Определяет несколько шаблонов, которые позволяют выбрать и освобождения блоков памяти для узел- на основе контейнеров.

#include <allocators>

Заметки

Заголовок <allocators> предоставляет 6 шаблонов выделения, которые можно использовать для выбора стратегии управления памятью для узел- на основе контейнеров.Для использования с этими шаблонами, он также предоставляет несколько различных фильтров синхронизации, чтобы настроить стратегии управления памятью во множество различным схемам многопоточности (включая нет).Соответствия стратегии управления памятью в известные шаблонам потребления памяти и требованиями к синхронизации конкретного приложения зачастую может увеличить скорость или уменьшение общие требования к памяти приложения.

Шаблоны распределитель реализуются с многоразовыми компонентами, которые можно настраивать или заменить, чтобы предоставить дополнительные стратегии управления памятью.

Узел- на основе контейнеры в стандартной библиотеке C++ (std::list, std::set, std::multiset, std::map и std::multimap) хранят их элементы в отдельных узлах.Все узлы для указанного типа контейнера тот же размер, что и общецелевого диспетчера памяти не требуется.Поскольку размер каждого блока памяти известен во время компиляции, то диспетчер памяти может быть намного проще и быстрее.

При использовании с контейнерами, узел- не основаны (например, стандартное std::deque std::vector контейнеров библиотеки C++ и std::basic_string), шаблоны alllocator будут работать правильно, но не вероятно, чтобы предоставить любое улучшение производительности по сравнению по умолчанию механизм распределения.

Распределитель является классом шаблона, который описывает объект, который управляет выделение и освобождение памяти объектов и массивов объектов, обозначенного типа.Объекты распределитель используются несколькими классами шаблона контейнера в стандартной библиотеке C++.

Allocators все шаблоны данного типа:

template<class Type>

class allocator;

если аргумент Type шаблона тип, управляемый экземпляром механизма распределения.Стандартная библиотека C++ предоставляет используемый по умолчанию механизм распределения, класс механизм распределения шаблона, который определен в <memory>.Заголовок <allocators> предоставляет следующие 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 для каждого блока.Он может, например, suballocate из большего блока или освобожденных блоков кэшем для последующего перераспределения.

С компилятором, который не может компилировать элемент повторно привязать значение аргумента std::size_t, используемый, когда создан шаблон не обязательно значения _Sz аргумента, переданного функции-членам кэша и deallocate.

<allocators> предоставляет следующие шаблоны кэша:

Фильтр распределитель блока, реализующий его функции-члены с помощью другого механизма распределения блока, который передается в него в качестве аргумента шаблона.Наиболее распространенный вид фильтра фильтр синхронизации, который применяет политику синхронизации для управления доступом к функции-членам другого механизма распределения блока.<allocators> предусмотрены следующие фильтры синхронизации:

<allocators> также предоставляет фильтр rts_alloc, который содержит несколько распределитель блока в примере, приводит и определяет, какой экземпляр, используемый для выделения и освобождения во время выполнения, а не во время компиляции.Используется компиляторами, которые не могут компилироваться повторная привязка.

Политика синхронизации определяет, как экземпляр распределитель обрабатывает одновременных запросов выделения и освобождения из нескольких потоков.Самая простая политика передать все запросы непосредственно через к основному объекту кэша, оставляя элемент управления синхронизации пользователю.Более сложная политика может быть использован мьютекс для сериализации доступ к основному объекту кэша.

Если компилятор компилировать поддерживает приложения и единый- продетые потоков и multi- продетые потоками, то по умолчанию фильтр синхронизации для единый- продетых потоками приложений sync_none; во всех остальных случаях это sync_shared.

Шаблон cache_freelist кэша, имеет максимальный аргумент класса, определяющего максимальное число элементов, которые нужно сохранить в свободном списке.

Предоставляет следующие классы:<allocators> max

Ee292134.collapse_all(ru-ru,VS.110).gifМакросы

ALLOCATOR_DECL (<allocators>)

Создает класс шаблонов выделения.

CACHE_CHUNKLIST (<allocators>)

Создает stdext::allocators::cache_chunklist<sizeof(Type)>.

CACHE_FREELIST (<allocators>)

Создает stdext::allocators::cache_freelist<sizeof(Type), max>.

CACHE_SUBALLOC (<allocators>)

Создает stdext::allocators::cache_suballoc<sizeof(Type)>.

SYNC_DEFAULT (<allocators>)

Создает фильтр синхронизации.

Ee292134.collapse_all(ru-ru,VS.110).gifОператоры

operator!= (<allocators>)

Тесты для проверки неравенства между объектами выделения определенного класса.

operator== (<allocators>)

Тесты на равенство между объектами выделения определенного класса.

Ee292134.collapse_all(ru-ru,VS.110).gifКлассы

allocator_base

Определяет базовый класс и общие функции, необходимые для создания определяемых пользователем выделения из фильтра синхронизации.

allocator_chunklist

Описывает объект, который управляет выделение и освобождение памяти для объектов с использованием кэш типа cache_chunklist.

allocator_fixed_size

Описывает объект, который управляет выделение и освобождение памяти для объектов типа Type с помощью кэш типа cache_freelist с длина управляемой max_fixed_size.

allocator_newdel

Реализует механизм распределения, который использует operator delete к распределению блок отмены и operator new памяти, чтобы выделить блок памяти.

allocator_suballoc

Описывает объект, который управляет выделение и освобождение памяти для объектов типа Type с помощью кэш типа cache_suballoc.

allocator_unbounded

Описывает объект, который управляет выделение и освобождение памяти для объектов типа Type с помощью кэш типа cache_freelist с длина управляемой max_unbounded.

allocator_variable_size

Описывает объект, который управляет выделение и освобождение памяти для объектов типа Type с помощью кэш типа cache_freelist с длина управляемой max_variable_size.

cache_chunklist

Определяет механизм распределения блока, выберите блоки памяти и отмены выделения одного размера.

cache_freelist

Определяет механизм распределения блока, выберите блоки памяти и отмены выделения одного размера.

cache_suballoc

Определяет механизм распределения блока, выберите блоки памяти и отмены выделения одного размера.

freelist

Управляет списком блоков памяти.

max_fixed_size

Описывает максимальный объект класса, что ограничения объект freelist к постоянной максимальной длины.

max_none

Описывает максимальный объект класса, что ограничения на объект freelist максимальной длины нулю.

max_unbounded

Описывает максимальный объект класса, не ограничивает максимальную длину объекта freelist.

max_variable_size

Описывает максимальный объект класса, что ограничения объект freelist до максимальной длины, примерно пропорциональна на количество выделенных блоков памяти.

rts_alloc

Класс шаблона rts_alloc описывает фильтр, содержащий массив экземпляров кэша и определяет, какой экземпляр, используемый для выделения и освобождения во время выполнения, а не во время компиляции.

synchronization_none

Описывает фильтр синхронизации, который не предоставляет никаких синхронизации.

synchronization_per_container

Описывает фильтр синхронизации, который предоставляет отдельный объект кэша для каждого объекта выделения.

synchronization_per_thread

Описывает фильтр синхронизации, который предоставляет отдельный объект кэша для каждого потока.

synchronization_shared

Описывает фильтр синхронизации, в котором используется мьютекс, чтобы контролировать доступ к объекту кэша, совместно используемый всеми allocators.

Требования

заголовок: <allocators>

Stdext пространство имен:

См. также

Другие ресурсы

Файлы заголовков