内存管理——ptmalloc机制和SGI STL的二级空间配置器的区别

今天遇到了一个有意思的问题:ptmalloc内存分配机制是数组+链表管理的,而SGI STL的二级空间适配器同样是数组+链表管理方式,那么有了malloc的ptmalloc的机制,为什么不直接用呢?为什么还要有二级空间配置器这东西存在呢???

个人理解:
先从空间配置器入手,空间配置器将new的操作细分:
1.先申请空间,
2.在申请的空间上调用构造函数
(为什么要将这两步拆分,之前的博客有讲到,不多赘述)
那么提供申请空间的api就是malloc,而malloc底层用到的ptmalloc的机制是对于小内存块先申请,不用时再放到链表中,空闲链表并不是一开始就建立好的。因此,如果我要不停申请新的小内存块,依然需要不断调用malloc。
但是,二级空间配置器不是这样的,它在第一次refill内存池的时候,是调用malloc,申请类对象*20(默认20个)的大小,将剩下的内存分割,头插到对应的free_list上,那么,我再次调用二级空间配置器的时候,不需要再次调用malloc,直接将剩下的对应free_list下的第一个内存块返回给用户,在调整一下就好了。
空间配置器不用频繁的系统调用,从而节约了时间,提高了效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值