SGI STL 的配置器与标准规范不同,SGI STL默认空间配置器为std::alloc, SGI STL allocator并不完全符合标准规格,但是这并不影响我们引用其代码,因为我们通常使用的是缺省的空间配置器,很少需要自己指定配置器。
//SGI STL缺省使用alloc为配置器 template<class T, class Alloc = alloc> class vector { //类体 }
SGI STL allocator只是对::operator new 和 ::operator delete 的一层浅层次包装,并没有考虑到任何效率上的强化。SGI 用的是特殊的空间配置器
std::alloc。
为了性能上的高效性和代码的可读性,STL 空间配置器std::alloc对对象而言,一般有两个阶段的操作:
1、内存配置操作由alloc::allocate()负责, 内存释放释放操作由alloc::deallocate()负责。
2、对象构造由::construct()负责, 对象析构操作由::destroy()负责。
SGI配置器定义于<memory>之中,<memory>内含以下三个文件:
#include <stl_alloc.h> //负责内存空间的配置与释放
#include <stl_construct.h> //负责对象内容的构造与析构
#include <stl_uninitialized> //定义一些全局函数,用来填充(fill)和复制(copy)大块内存数据:
// un_initialized_copy()、un_initialized_fill()、un_initialized_fill_n()
un_initialized_copy()、un_initialized_fill()、un_initialized_fill_n()这些函数虽然不属于配置器范畴,但是与对象初值设置有关。对于容器的大规模元素初值设置很有帮助,最差情况下会调用construct(),最佳情况下会调用C标准函数memmove()直接进行内存数据的移动。