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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值