小型对象内存分配

c++语法中动态分配和指针/引用的使用非常普遍,然而缺省的自由存储区分配器(比如::operator new::operator delete)只适用于大对象对分配,对小对象分配并不有效,甚至非常低劣,多次分配小对象后容易产生碎片。

 

 

小型对象分配器

小型对象分配器分为4层结构。如图所示,下层提供功能供上层使用。

+-------------------+
|    SmallObject    |
+-------------------+
| SmallObjAllocator |
+-------------------+
|   FixedAllocator  |
+-------------------+
|       Chunk       |
+-------------------+

 

最下层是Chunk对象,每一个Chunk管理一大块内存,此大块内存包含整数个固定大小的区块。可以用来分配和归还,当其中没有剩余时,分配失败返回零。

 

第二层是FixAllocator class,其以Chunk为构件。主要用来满足那些累计总量超过Chunk容量的请求。FixAllocator通过一个array(实际是vector)组合Chunks。如果所有Chunk都被使用,FixAllocator分配新Chunk,并加入array,来满足需求。

 

第三层是SmallObjectAllocator提供通用分配/归还函数。拥有数个FixedAllocator对象,每个负责分配某特定大小对象。根据申请bytes个数不同,SmallObjAllocator对象会将内存分配申请分发。如果请求量过大,会转交系统new

 

第四层是SmallObject,它包装FixedAllocator,以便向C++ classes提供封装良好的分配服务。SmallObject重载newdelete。你只需要让你的对象派生于SmallObject

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值