STL初探——空间配置器

  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()直接进行内存数据的移动。

  

既然选择了远方,便只顾风雨兼程
原文地址:https://www.cnblogs.com/Forever-Road/p/6796481.html