<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
Макросы
Создает класс шаблонов выделения. |
|
Создает 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. |
Требования
заголовок: <allocators>
Stdext пространство имен: