容器的空间的分配都需要空间配置器。
1、默认的空间配置器
vector类的模板声明为:
template<class _Ty, class _Ax = allocator<_Ty> >
class vector
一般来说,我们没有必要重新定义一个allocator。自定义的方式主要是为了提高内存分配相关操作的性能。而STL提供的方式性能已经足够好了。
在windows平台上,new的底层实现是基于C语言的malloc函数;malloc函数家族又是基于Windows HeapCreate、HeapAlloc、HeapFree等相关API来实现的(具体可以参考%VSInstallFolder%\VC\crt\src目录中的heapinit.c、malloc.c和new.cpp等相关函数)。
2、空间配置器的定义
template <typename T>
class CHxAllocator
{
public:
// typedefs...
typedef T value_type;
typedef value_type* pointer;
typedef value_type& reference;
typedef value_type const* const_pointer;
typedef value_type const& const_reference;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
// rebind...
template <typename _other> struct rebind { typedef CHxAllocator<_other> other; };
};
3、空间配置器的绑定
rebind是一个可以分配空间给另一个类型的结构