STL中空间配置器的策略

         SGI STL中的空间配置器分为两级,第一级配置器直接使用malloc()很free()来分配和释放内存,第二级配置器则使用内存池技术配置和回收内存。

        当需要配置的内存大于128B时,移交第一级配置器处理;当小于128B时,则通过内存池管理。第二级配置器维护维护了16个free_lists,各自管理大小分别为8,16,24......128B大小的小额区块。第二级配置器主动将内存需求量上调为8的倍数,然后在free_lists中查找对应大小内存的管理链表,如果链表中有可用区块,就取出给客端。如果链表中没有可用区块,就调用chunk_alloc()从内存池中取内存,缺省取20个需求量大小的区块,1个给客端,剩余19个交给对应链表维护。如果内存池内存不足20个需求量,但是大于1个需求量,就把1个给客端,剩余的给对应的链表维护。如果内存池本身就没有内存,就调用malloc()从堆上取需求量的2倍加上一个随机量大小的内存为内存池注入源头活水以应对客端的需求。其中1个给客端,19个给对应链表维护,剩余的给内存池。如果malloc()失败,就抛出bad_alloc异常。


              

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值