zoukankan      html  css  js  c++  java
  • 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()直接进行内存数据的移动。

      

    既然选择了远方,便只顾风雨兼程
  • 相关阅读:
    shell脚本模拟交互操作实现上传文件至sftp
    从文件A中去除掉文件B的内容
    Linux批量kill某个程序的进程
    单数据盘或者很多数据盘mount挂载到某个目录
    用户HTTP请求过程简单剖析
    linux服务器系统盘坏且系统盘为软raid的修复方法
    linux系统运行状态检查
    TCP的三次握手和四次挥手
    ES6嵌套对象的解构
    DRF框架在嵌套关系下实现嵌套对象字段的过滤
  • 原文地址:https://www.cnblogs.com/Forever-Road/p/6796481.html
Copyright © 2011-2022 走看看