STL内存管理

本文探讨了STL的两级内存配置器,一级配置器针对大于128B的内存请求,二级配置器通过数组+链表管理内存块。详细阐述了二级配置器的内存池机制,以及内存申请和释放过程。同时,对比了ptmalloc和memcached的内存管理方式,强调了内存管理在性能上的关键细节。
摘要由CSDN通过智能技术生成

STL中的内存管理为两级配置器,一级配置器是当申请内存大于128B时候使用系统函数malloc/free进行申请释放。

二级配置器,将内存块分为大小间距为8的16个8B到128B的等长度的chunk,使用数组+链表管理。数组中存储的是大小相同的用链表链接起来的内存块。在STL中使用长度为16的数组,0处存储8Byte,然后依次16,24,36.....依次加8字节。二级配置器维护着一个内存池,如果所申请的内存块对应的数组的链表下为空,就向池中申请,如果池中为空或者不够则就通过malloc来进行申请内存。

申请内存,首先判断是否超过128B,否则使用一级配置器。使用二级配置器,求得精确申请的内存的大小,内存对齐8。然后再定位到该大小所在的数组下的链表。判断链表是否为空,不空就返回第一个结点给用户,空则查看池中是否为空。内存池中有几种情况,第一有超过20个块的大小,则返回这20个,第二不超过20个,返回最大达到的块数,第三不足一个就将这一个链接到数组中合适的位置。如果为空则就通过malloc向池中注入2倍的所需要的+n内存即这次所申请的内存块大小的40倍大小+n,将20个大小的块连入到该数组下标下,其中的第0块返

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值