<allocators>
定义帮助分配,并释放对基于节点的容器内存块的多个模板。
#include <allocators>
备注
<allocators> 标头提供可用于为基于节点的容器选择内存管理方法的六个分配器模板。 用于这些模板的使用,它还提供了若干不同的同步筛选器为内存管理方法定制的各种不同的多线程编程模式(包括无)。 与内存管理方法为已知内存使用模式和同步要求,特定应用程序通常可以提高了个速度或减少应用程序的总体内存要求。
分配器模板实现具有可以自定义或更换提供附加内存管理方法的可重用元素。
基于节点的容器对标准C++库(std::list、std::set、std::multiset、std::map和std::multimap)中的各个节点存储其组件。 特定容器类型的所有节点大小相同,因此,泛型内存管理器的灵活性不是必需的。 由于每个范围内存块在编译时已知,内存管理器可能更简单且更快。
当使用不根据节点的容器(如标准C++库(stl)容器std::vector std::deque和std::basic_string),alllocator模板将正确工作,但是,无法提供在默认分配程序的任何性能改进。
分配器是描述对象管理存储分配和释放对象和数组的一个指定类型的对象的模板选件类。 一些容器模板选件类使用分配器对象对标准C++库中。
分配器是此类型的所有模板:
template<class Type>
class allocator;
如果模板参数 Type 是分配器实例管理的类型。 标准C++库提供一个默认分配程序,模板选件类 分配器,在 <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 和 sync_per_thread 同步筛选器的节点。
块分配器是缓存或筛选器。 缓存是采用类型std::size_t的一个参数的模板选件类。 它定义分配和释放内存块一个范围的块分配器。 使用运算符 new,它必须获取内存,但是,它不需要进行单独调用每个的 new 块的运算符。 它可以,例如,从较大suballocate块或释放的缓存对于后续重新分配块。
使用无法生成rebind的编译器std::size_t参数的值使用了模板时实例化是参数_Sz的值传递给缓存的成员函数不一定分配和释放。
<allocators> 提供以下缓存模板:
筛选器是实现其成员使用另一个的功能块分配程序传递给它用作模板参数的块分配器。 筛选器的最常见的形式是同步筛选器,将同步策略与该成员的控件访问另一个实例的功能块分配器。 <allocators> 提供以下同步筛选器:
<allocators> 还提供筛选器 rts_alloc,保存多个块分配程序实例并确定要使用的实例。分配或释放在运行时而不是在编译时。 它用于无法生成rebind的编译器。
同步策略如何确定分配程序实例处理并发分配和解除分配请求从多个线程。 最简单的策略是直接通过所有请求传递给基础缓存对象,保留同步管理给用户。 一个更复杂的策略可以是使用mutex对基础缓存对象的访问。
如果编译器支持生成单线程的和多线程应用程序,单线程应用程序的默认同步筛选器是 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 对象的使用一个缓存与 max_fixed_size管理长度的类型 cache_freelist 的对象。 |
|
实现使用 operator delete 释放内存块,并分配的内存块 operator new 的赋值程序。 |
|
描述控制存储分配和释放类型 Type 对象的使用一个缓存 cache_suballoc类型的对象。 |
|
描述控制存储分配和释放类型 Type 对象的使用一个缓存与 max_unbounded管理长度的类型 cache_freelist 的对象。 |
|
描述控制存储分配和释放类型 Type 对象的使用一个缓存与 max_variable_size管理长度的类型 cache_freelist 的对象。 |
|
定义分配和释放内存块一个范围的块分配器。 |
|
定义分配和释放内存块一个范围的块分配器。 |
|
定义分配和释放内存块一个范围的块分配器。 |
|
管理列表内存块。 |
|
描述了最大选件类对象限制到内置的最大长度的一 freelist 对象。 |
|
描述了最大选件类对象限制为零的最大长度的一 freelist 对象。 |
|
描述未限制 freelist 对象的最大长度的最大选件类对象。 |
|
描述了最大选件类对象为一个最大长度的一 freelist 对象大致为位数的数字对分配的内存块的限制。 |
|
保存缓存实例的rts_alloc模板选件类描述 筛选器 并确定要使用的实例。分配和释放在运行时而不是在编译时。 |
|
描述未提供同步的同步筛选器。 |
|
说明为每个分配器对象提供单独的缓存对象的同步筛选器。 |
|
说明为每个线程提供单独的缓存对象的同步筛选器。 |
|
描述使用mutex控制缓存对象的访问由任何分配程序共享的同步筛选器。 |
要求
标头: <allocators>
命名空间: stdext