小对象的分配技术(结)

我很愿意在小对象的分配策略这里花很多时间,因为之处在这里也有很多疑问。

我也很伤感“我的大脑没有版本回溯”,无法和你分享我在弄明白这个问题前的痛苦和弄明白这个问题那一刻的思维方式。但我尝试尽量回忆,这于小对象有关,与其他东西无关,但是思考问题方法和你以后可能遇到的很多东西有关。 

小对象分配策略分成了四层,Chunk、FixedAllocator、SmallObjAllocator和SmallObject,各层各负其责,底层绝对不考虑上层的东西,所以只见树木不见森林的学习方法会碰到很多疑惑,譬如为何以固定大小的分配器可以分配任意大小的内存块的问题。

但是,功能的严格划分保证了问题的简化、代码的简洁,在这里也给我们提供了不错的效率。

理解Loki小对象分配需要从全局着眼,先明白结构原理而后看细节会少走不少弯路,从某种意义上来说由顶而下的分析方法也会促使问题早日解决。另外,自己的想法很重要,学会去学一个思想而不是拾废纸片。

SmallObject提供了operator new和operator delete,使得内存分配可以使用我们的策略而不是系统的new和delete。

SmallObjAllocator提供了各种大小的内存块的一个集合,任意大小的内存分配都可以在集合中找到自己。

FixedAllocator只可以分配特定blockSize大小的内存块,但是从1到maxBlockSize得一个FixedAllocator集合可以满足所有内存分配请求。FixedAllocator着眼大块内存的管理,这个大指的是无限大,它可以被无限扩充,从这个层面上来说它不适合再做细节分配的工作。

Chunk是固定大小内存块的组合,只不过总内存块数不多,这方便了它的管理,也和FixedAllocator得功能分开。它着眼于自己管理下的特定一块内存的提取和归还。

MemControlBlock是Chunk管理的特定的一块内存,你可以理解为它是系统new函数时的char级内存,它是最小单元,你不可能分配比MemControlBlock更小的内存块。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值