首页 > 其他 > 详细

stl里面的空间适配器

时间:2016-03-05 00:19:37      阅读:175      评论:0      收藏:0      [点我收藏+]

一般而言,如果频繁地向system heap申请和释放空间很小的内存空间块(小于128B的),就会对系统内存资源产生很多内存碎片(fragment)的问题,而C++的::operator new() 和 ::opeartor delete() 相当于C的 malloc() 和 free(), 所以stl为此设置了双层的内存配置器,当申请的空间大于128B时 就使用第一级配置器,如果小于128B就使用第二级配置器

关于第一级allocator: 实际是使用malloc free realloc 等C函数执行实际的内存配置,释放,重配置操作

关于第二级allocator: 本质上是一个内存池(memory pool), 先配置一大块的内存, 并用自由链表(free list)进行维护·

 内存池的结构:

一共有16个free list 各自管理大小为 8,16,24,32,40,,,,128Bytes的小额区块

 

freelist 使用了union 结构来节省对指针所造成的内存开销如下图:

unionobj {

union obj * free_list_link;

char client_data[1]; /* The client sees this. */

};

 

技术分享

 

题外思考:

 

我们现在真的还需要考虑内存碎片的问题吗?https://www.zhihu.com/question/21894104

 推荐阅读陈硕的回答以及他所给出的链接.

 

一个或许让程序员无需关心内存碎片问题的malloc的api:

TCmalloc 的介绍: http://goog-perftools.sourceforge.net/doc/tcmalloc.html

 

stl里面的空间适配器

原文:http://www.cnblogs.com/jusonalien/p/5243809.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!