五、分配器:

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. CoreAnimation 目录

    CoreAnimation 目录 CoreAnimation 开篇 CoreAnimation 寄宿图 CoreAnimation 图层几何学 CoreAnimation 视觉效果

  2. 开发使用Node.js的一个小技巧

    Node.js作为可以在服务器端运行的一门语言,其处理长连接.多请求的优势受到各大编程爱好者的追捧. 但是在开发调试方面却极为不方便,因为每次改动代码后,都需要终止当前进程,重启服务器.supervi ...

  3. 一个想法照进现实-《IT连》创业项目:关于团队组建

    前言: 从上一篇<三天的风投对接活动内幕分享>归来后,从中领悟了不少内涵. 之后暂停了找钱的想法,这些天也拒绝了不少想要参与众筹的同学. 目前主要精力放在以下三件事: 1:重新规划顶层设计 ...

  4. QQGame防专线中断系统介绍

    先说说背景 QQGame是一个全区全服的休闲类游戏平台和社区,主逻辑服务器部署在四大IDC,核心DB全部在深圳.对跨IDC的专线依赖度很高. 网平提供专线故障后切VPN的备份机制,当VPN也中断时QQ ...

  5. iOS开发之UITabBarController

    1.概述 跟UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型例子就是QQ.微信等应用. 2.UITabB ...

  6. Linux之kill,pkill,killall命令

    kill,pkill,killall这些命令都是用来杀死进程的 查找进程的方法: ps -ef|grep pidof 进程名 ps命令 http://www.cnblogs.com/along1226 ...

  7. 为什么使用 Containjs 模块化管理工具效率高?

    为什么使用 Containjs 模块化管理工具效率高? 要说明这个首先得说明一下,Containjs 的模块加载原理. 第一步,首先使用异步加载(ajax)在 js 目录下的 app.js 入口模块( ...

  8. scss语法介绍

    这里既然是对语法的介绍,那么至于如何安装和编译scss我就不多少了,主要是因为本人在群里认识的小伙伴有的不会用scss,所以就借着放假的机会来对scss语法做个总结,博主在开发过程中用scss蛮多,所 ...

  9. 【Egret】web版本报错:XMLHttpRequest cannot load

    [Egret] web发行版本报错:XMLHttpRequest cannot load file:///C:/Users/PX/Documents/EgretProjects/Xt1/resourc ...

  10. Linux云自动化运维第八课

    第十三单元 软件安装 一.软件名称识别 [abrt-addon-ccpp]-[2.1.11-19].[el7].[x86_64].rpm ###rpm结尾的适用与redhat操作系统 ||       ...