五、分配器:

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. SQL_Join 小总结

    原文出自 :http://www.nowamagic.net/librarys/veda/detail/936 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多in ...

  2. Android中的几种多线程实现

    有以下几种方式: 1)Activity.runOnUiThread(Runnable) 2)View.post(Runnable) ;View.postDelay(Runnable , long) 3 ...

  3. HBase架构

    文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/6573817.html  转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...

  4. js应用之实现图片切换效果

    数组的操作与应用 数组的定义 var 数组名=new Array(); //创建空数组 var 数组名=new Array(size);//创建指定数组长度的数组 var 数组名=new Array( ...

  5. 2017年3月23日 坚果性能测试Loadrunner 免费公开课

    2017-03-23  坚果性能测试1群 607937164  我昨天看了一下飞扬老师的讲义PPT,真的很棒,BAT的专业性能老师果然是有好几把刷子,十分受教,相信周四的公开课一定会让大家收益颇丰的. ...

  6. Linux之nc命令详解

    nc是一个强大的网络工具,可以通过yum安装 [root@LB2 ~]# which nc /usr/bin/which: no nc in (/usr/local/sbin:/usr/local/b ...

  7. pyqt4实现tab界面切换

    (转:https://segmentfault.com/q/1010000005143428)

  8. python的try方法中的else和finally的区别

    #coding=utf-8__author__ = '14356_000'try: print '1'except: print '2'else: print '3'finally: print '4 ...

  9. 期待微软平台即服务技术Service Fabric 开源

    微软的Azure Service Fabric的官方博客在3.24日发布了一篇博客 Service Fabric .NET SDK goes open source ,介绍了社区呼声最高的Servic ...

  10. 手机自动化测试:appium源码分析之bootstrap八

    手机自动化测试:appium源码分析之bootstrap八   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣, ...