迭代器接口

最近闲来无事看看《STL源代码剖析》发现之前看的有关STL的东西都忘记了。所有从最基本的内存配置器开始看了看。这里先记下迭代器的接口,这是STL的核心所在。

 

在《STL源代码剖析》这本书中,所用到的代码都来自于SGI STL,SGI STL为了提高内存的使用效率,在空间配置器中引入了具有次配置内力的空间迭代器(sub-allocation),根据申请空间大小不同采取不同的策略。对于标准的空间配置器而言,不管申请的空间多大都是直接从系统中申请资源,而对于具有次配置能力的迭代器而言,它根据申请空间大小的不同采取不同的策略。在SGI STL中,当申请的空间大于128bytes时,采用标准空间配置器配置空间,当申请的空间小于128bytes时,则从内存池(memory-pool)中申请空间。这不仅能够提高空间配置的效率,而且能有效的清理系统碎片。SGI STL的内存池管理策略是首先向系统申请一大块内存预用,并用由16个链表组成的数组维护这些资源。为了管理方便,SGI第二级配置器会主动将任何小额区块的内存需求量上调至8的整数倍(例如客户端要求20个bytes,就自动调整为24bytes),并维护16个free-list,各自管理大小分别为8,16,24,32,40,48,56,64,72,80,88,98,104,112,120,128bytes的小额区块。

这样当需要申请小于128bytes的空间时,只需从对应的free-list链表中取一个小区块即可,当对应的free-list没有小区块时,则内存池管理程序会从预先申请的大块空间中申请20个(默认为20,当预先申请的大块空间没有足够的空间时,则将剩下的空间都分配给申请程序),当预先申请的大块空间也被用完的时候,则需要向系统申请新的大块空间。

通过SGI次配置器,可以有效的提高空间的配置能力。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值