一、STL内存配置器的总体设计结构

1.两级内存配置器:SGI-STL中设计了两级的内存配置器,主要用于不同大小的内存分配需求,当需要分配的内存大小大于128bytes时,

使用第一级配置器,否则使用第二级配置器;对于小块的内存的分配使用第二级配置器使用分配与释放内存块的效率更高,时间复杂度为O(1);

2.两级配置器的优点:

(1)使用两级配置器主要是为了避免太多的小块的内存申请导致内存空间中的内存碎片问题;

(2)使用第二级配置器也可以避免太多小块内存分配导致的内存空间浪费问题,因为在申请内存块时内存块的一部分必须记录该被分配的内存块

的大小,在第二级配置器中则不需要记录分配的内存块的大小;

(3)第二级配置器同样也使小块的内存分配与释放效率更快,复杂度为O(1),而普通的首次适配、下次适配、最佳适配算法都无法达到分配与释

放内存块的时间复杂度都为O(1);

二、第一级配置器

1.功能:第一级配置器支持allocate,reallocate,deallocate,set_malloc_handler功能;

2.与C语言内存分配函数的比较:相比C语言中的malloc,realloc,free函数而言,第一级配置器是C语言中内存分配函数的一层包装,其相应的功能分

别调用对应的C语言内存分配函数;

3.第一级配置器的内存分配失败处理功能:第一级配置器增加了处理内存分配失败的机制,set_malloc_handler函数允许用户指定一个函数用于内存

分配失败的处理,当内存分配失败时第一级配置器会调用该函数,如果用户没有指定特定的处理函数,则根据实际情况,根据用户的选择抛出内存分

配失败的异常或者在标准错误流中打印出错信息;

三、第二级配置器

1.第二级配置器的结构:第二级配置器含有一个内存池以及用于管理8的整数倍大小的16个free lists;free lists用来分配小块的内存,内存池用来

填充free lists,使每个free lists含有足够的小块内存用于分配,当free list没有足够的小型的内存块用于分配时,向内存块申请内存填充free list;

2.内存池:内存池实际上是一个使用malloc分配的一个足够大的内存块;

3.free lists:在堆的分配算法中存在首次适配、下次适配、最佳适配算法。同样,堆中内存块的组织方法有隐式空闲链表,显示空闲链表和分离链表法,

free lists即为分离链表法,该方法的优点为分配与释放内存都是O(1)的时间,虽然SGI-STL使用的是普通的分离存储方法,而不是分离适配方法,这会

导致部分空间的浪费,然而由于内存块的浪费在0-8bytes之间,相比较而言,对于经常需要较小的内存块分配的程序而言效率的提高更大;

四、SGI-STL内存分配算法流程图

 

STL内存配置器的更多相关文章

  1. SGI STL内存配置器存在内存泄漏吗?

    阅读了SGI的源码后对STL很是膜拜,很高质量的源码,从中学到了很多.温故而知新!下文中所有STL如无特殊说明均指SGI版本实现. STL 内存配置器 STL对内存管理最核心部分我觉得是其将C++对象 ...

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

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

  3. stl空间配置器线程安全问题补充

    摘要 在上一篇博客<STL空间配置器那点事>简单介绍了空间配置器的基本实现 两级空间配置器处理,一级相关细节问题,同时简单描述了STL各组件之间的关系以及设计到的设计模式等. 在最后,又关 ...

  4. 【转】STL空间配置器

    STL空间配置器(allocator)在所有容器内部默默工作,负责空间的配置和回收.STL标准为空间配置器定义了标准接口(可见<STL源码剖析>P43).而具体实现细节则由各编译器实现版本 ...

  5. STL——空间配置器(构造和析构基本工具)

    以STL的运用角度而言,空间配置器是最不需要介绍的东西,它总是隐藏在一切组件(更具体地说是指容器,container)的背后,默默工作,默默付出.但若以STL的实现角度而言,第一个需要介绍的就是空间配 ...

  6. STL空间配置器

    1.什么是空间配置器? 空间配置器负责空间配置与管理.配置器是一个实现了动态空间配置.空间管理.空间释放的class template.以内存池方式实现小块内存管理分配.关于内存池概念可以点击:内存池 ...

  7. 咬碎STL空间配置器

    STL空间配置器 一.开场白: 给我的感觉就是,了解是空间配置器的功能,是那么的明了:在看原理,我还是很开心:接下来是360度大转变: 那么长的变量或者函数命名.那么多的宏.不爽,不过,遇上我这种二货 ...

  8. STL——空间配置器(SGI-STL)

    一. 空间配置器标准接口 参见<STL源码剖析>第二章-2.1.<memory>文件. 二.具备次配置力的SGI空间配置器 1. SGI STL的配置器与众不同,也与标准规范不 ...

  9. stl空间配置器简介

    1. 符合STL标准的空间配器接口 STL是c++中使用非常广泛的一个标准库,它包含各种有用的容器.而空间配置器作为STL各种容器的背后的核心,负责容器内部内存的分配和释放.不过空间配置器可以分配的也 ...

随机推荐

  1. 菜鸟学java开篇

    从事it工作已有接近两年的时间了, 一直从事的是php的工作, 一直都想学java ,原因就不多说了, 毕竟优秀的php程序员,都会是一个其他方面的高手, 例如java ,并不是说java有多好,ph ...

  2. PHP中字符串补齐为定长

    方法一 for ($i=0; $i<100; $i++) { $index = sprintf('%04d', $i); echo $index.'<br />'; } 方法二 fo ...

  3. cookie简介

    上例子 1.首先要用php创建cookie发送给客户端,利用setcookie()方法即可 <?php /* * * @Authors peng--jun * @Email 1098325951 ...

  4. mud目录命令说明

      目錄結構 以下列出的是 ES2 mudlib 根目錄下標準的子目錄結構,以及簡短的說明. /adm 儲存由系統管理者所管理的程式與資料檔. /std 儲存標準物件的程式碼. /obj 儲存通用物件 ...

  5. MSI文件静默安装

    以.net4为例,以下命令为静默安装: dotNetFx40_Full_x86_x64.exe /q /norestart /ChainingPackage FullX64Bootstrapper / ...

  6. 第4章 分治策略 monge阵列

    /* fi表示第i行的最左最小元素的列小标,则有f0<f1<f2<...<fn-1 取数组的偶数行,组成新的子数组,递归求解最左最小元素的列下表,利用偶数项限定奇数项的范围,再 ...

  7. Oracle EBS-SQL (SYS-10):锁定表查询.sql

    /*死锁查询-1*/ SELECT o.object_name, l.session_id,l.process, l.locked_mode FROM v$locked_object l , dba_ ...

  8. brief InformationTechnology theory of evolution

    信息技术进化论简述 无文化流氓帮帮主Ruiy Pk 清华土匪帮帮主YiC 1,按人机交互方式 命令行-->图形界面-->自然交互(语音+手控) Tips:命令行(IBM大型机,小型机+ S ...

  9. _.each的用法2

    有这样一个需求:一个对象数组: 内容如下: {[ {id:"ssss",position:"4"}, {id:"ssss",position ...

  10. 从零单排PAT1015,1016,1017,1018

    1015德才论 题目要求: 输入格式: 输入第1行给出3个正整数,分别为:N(<=105),即考生总数.L(>=60).为录取最低分数线,即德分和才分均不低于L的考生才有资格被考虑录取:H ...