内存分配器初步了解

内存分配器初步了解

这片文章对于内存分配器的实现总结的非常好,忍不住记录下来,归纳一二。
自己动手实现一个malloc内存分配器

1. 我们什么时候知道程序到底需要多少内存:只有当程序运行起来我们才能知道
2. 内存分配2个关键问题:
    (malloc)从堆中找到一块空闲空间返回给申请者 
    (free)当内存使用完毕后,返回给该区域
3. 内存分配器基本实现细节:
	(1)追踪每块内存的分配状态
	(2)该选择怎样的空闲内存块给用户
	(3)分配出内存块后,空闲内存剩下的空间该怎么处理
	(4)释放的内存块该怎么处理
4. 内存块设有信息头header(标识该内存块大小,和是否已经分配),假设我们一次最多申请2G的内存块,则我们可以用3
   1bit来记录块大小,剩下一个bit来记录该块是否已分配
5.  内存块除header以外的空间被称为负载payload。所以说不是堆上有10个G的空间,我们就可以使用10G的内存,有些空
    间会被分配给信息头header
6. 通过引入header,我们知道了每块的堆的空间大小,所以我们可以很轻松的遍历整个堆,追踪每块内存的分配状态
7. 分配空闲内存的策略有3种:
   (1) First Fit
   (2) Next Fit
   (3) Best Fit  —— 选择最优空间,会遍历整个堆,所以最慢
8. 如果在32字节内存堆中仅分配12字节的数据,会造成该堆内部的空间浪费,形成内部碎片。解决该问题的一个方法就是
   将多余的内存堆进行切割,形成一个新的空闲内存块
9. 在上一条情况下,后续将12字节的数据释放,会形成一个20字节和12字节的内存块。如果这时再申请30字节的空间,这
   2个内存块都无法利用。所以要合并连续空闲内存块
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值