五、分配器:

5.1、头文件:

  5.1.1、include<stl_alloc.h> //内存的分配。

  5.1.2、include<stl_construct.h> //对象的构造和析构。

  5.1.3、include<uninitialized.h> //对空间中的内存进行操作、 操作效率高。

5.2、分配,释放:

5.2.、static void* allocate(size_t __n) //申请获得所需的这段空间,然后返回。
      {
        void* __result = malloc(__n);
        if ( == __result) __result = _S_oom_malloc(__n); //如果分配失败就循环的进行搜索
        return __result;
      }   5.2.、 static void deallocate(void* __p, size_t /* __n */) //在标准的接口中做的都是适合大众的东西, 后期需要 simple_alloc 这样的一个类来进行包装,
      { //使其变成一个统一的接口,
        free(__p);
      }   5.2.、 static void* reallocate(void* __p, size_t /* old_sz */, size_t __new_sz)
      {
        void* __result = realloc(__p, __new_sz);
        if ( == __result) __result = _S_oom_realloc(__p, __new_sz);//如果分配失败就循环的进行搜索
        return __result;
      }

5.4、两级分配:

  5.4.1、一级分配器:__malloc_alloc_template

  5.4.2、二级分配器:__default_alloc_template

5.5、统一接口:

   simple_alloc
template<class _Tp, class _Alloc>

class simple_alloc //提供了一个统一的接口,调用起来更加的方便。
{          //在这个统一的接口中我们能申请我们需要的类型的内存空间大小。
public:
  static _Tp* allocate(size_t __n)
  {
    return == __n ? : (_Tp*) _Alloc::allocate(__n * sizeof (_Tp));
  }
  static _Tp* allocate(void)
  {
    return (_Tp*) _Alloc::allocate(sizeof (_Tp));
  }
  static void deallocate(_Tp* __p, size_t __n)
  {
    if ( != __n) _Alloc::deallocate(__p, __n * sizeof (_Tp));
  }
  static void deallocate(_Tp* __p)
  {
    _Alloc::deallocate(__p, sizeof (_Tp));
  }
};

stl_alloc.h分配器的更多相关文章

  1. 《STL源代码剖析》---stl_alloc.h阅读笔记

    这一节是讲空间的配置与释放,但不涉及对象的构造和析构,仅仅是解说对象构造前空前的申请以及对象析构后空间怎么释放. SGI版本号的STL对空间的的申请和释放做了例如以下考虑: 1.向堆申请空间 2.考虑 ...

  2. 自己动手实现STL 01:内存配置器的实现(stl_alloc.h)

    一.前言 在STL中,容器是其中的重中之重,基本的STL中的算法,仿函数等都是围绕着容器实现的功能.而,内存配置器,是容器的实现的基础.所以,我第一次要去编写便是内存配置器的实现.在STL中,内存配置 ...

  3. stl_alloc.h

    /* * Copyright (c) 1996-1997 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, ...

  4. STL stl_alloc.h

    # // Comment By: 凝霜 # // E-mail: mdl2009@vip.qq.com # // Blog: http://blog.csdn.net/mdl13412 # # // ...

  5. STL六大组件之——分配器(内存分配,好深奥的东西)

    SGI设计了双层级配置器,第一级配置器直接使用malloc()和free(),第二级配置器则视情况采用不同的策略:当配置区块超过128bytes时,视之为“足够大”,便调用第一级配置器:当配置区小于1 ...

  6. STL源代码剖析 容器 stl_hashtable.h

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie hashtable ------------------------------------ ...

  7. stl_vector.h

    stl_vector.h // Filename: stl_vector.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http ...

  8. stl_list.h

    stl_list.h // Filename: stl_list.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http://b ...

  9. stl_deque.h

    stl_deque.h // Filename: stl_deque.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http:/ ...

随机推荐

  1. [Spark] - SparkCore程序优化总结

    http://spark.apache.org/docs/1.6.1/tuning.html1) 代码优化 a. 对于多次使用的RDD,进行数据持久化操作(eg: cache.persist) b. ...

  2. 进入IT行业四月后的感想(生活日志)欢迎评论

    又失眠了,其实挺困,翻来覆去却是睡不着,寻思右想,还是写篇东西吧,不能把失眠的时间给浪费了

  3. 在WPF应用程序中使用Font Awesome图标

    Font Awesome 在网站开发中,经常用到.今天介绍如何在WPF应用程序中使用Font Awesome . 如果是自定义的图标字体,使用方法相同. 下载图标字体 在官方网站或github上下载资 ...

  4. webpack 打包js和css

    首先进行全局安装webpack npm install -g webpackcmd跳转到项目的文件夹,安装webpack npm install --save-dev webpack接着需要packj ...

  5. SpringMVC中@RequestBody引起的400异常处理,返回校验失败具体信息

    问题 使用@RequestBody接收一个json数据的时候,如果传入的参数不符合条件,就会直接返回400的error page. 但究竟是为什么会400并没有抛出来.这对大量参数字段的我们来说,排错 ...

  6. node.js报错throw err; // Rethrow non-MySQL errors e:\serverTest\node_modules\mysql\lib\protocol\Parser.js:79 解决方法

    今天在用node+angular做后台时,需要使用session保存登陆状态的时候,遇到了此问题,问题直译为非mysql问题,我也在后台取到的登陆用户名和密码,确实不是数据库问题.最后发现在使用ses ...

  7. 爱回收jd图标

    http://jd.aihuishou.com/images/icons.png http://misc.360buyimg.com/201007/skin/df/i/bg_hotsale.gif 来 ...

  8. MYSQL数据库-SELECT详解

    将SQL文件导入数据库中 $   source /url/file_name.sql ======================================================= S ...

  9. Jmeter添加监控指标

    需要监控的机器上安装Server-Agency(需要java环境支持)把ServerAgent-2.2.1.zip拷到需要监控的机器上,解压Linux启动如下2. Jmeter上添加监控最终有如下指标 ...

  10. 搭建ntp 时钟服务器_Linux

    一.搭建时间同步服务器1.编译安装ntp serverwget [url]http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2.4p4.tar.g ...