C++ STL中的内存优化

C++中的内存优化采用两级的空间配置器机制来解决。

二级配置器结构:

1. 第一级配置器:

第一级配置器是以malloc(),remalloc(),free()等C函数执行实际的内存配置,释放,重新配置等操作。一级空间配置器分配的是大于128字节的空间。如果分配失败,调用句柄释放一部分内存。如果还是失败,调用一个指定的函数。

如果要分配的区块小于128字节,则以内存池进行管理,内存池又称为次层配置器(sub-allocation):每次配置一大块内存,并维护对应的16个空闲链表(free-list),下次若有相同大小的内存需求,直接从free-list中取,若有小额区块被释放,则由配置器回收到free-list中。

在STL的第二级配置器中多了一些机制,避免太多小区快造成的内存碎片,小区块造成的不仅仅是内存碎片,同时还有一些额外的负担。区块越小,额外的负担所占的比重越大。

2. 内存池:

二级空间配置器:内存池采用了16个空闲链表,这里的16个空闲链表分别管理大小为8,16,24,32,……,120,128的数据块。这里的空闲链表的结点设计为一个联合体,既可以用来表示下一个空闲的数据块(存在于空闲链表中)的地址,也可以用来表示已经被用户使用的数据块(不存在与空闲链表中)的地址。

<
 
 
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值