一种快速的动态内存分配算法

算法步骤:
1.对每个内存缓冲池进行划分,分为位图和内存块。例如一个2K的内存池,按照16字节一个block单位来划分,首先拿出16字节(=2*1024/16/8)当做位图来标记每个block是否被占用,每一个block对应位图中一个Bit,内容如图1所示。当一个block的标记为1,表示可用,为0,表示被占用。
位图(16字节,用128bit表示)
在这里插入图片描述
图1

2.内存分配,针对需要多个块的情况,例如分配一个36字节的内存,需3个block。分配的时候只要查找哪些位图bit值为0的Block。需要解决的问题是,块与块之间如何关联,组成一块完整的内存块。每个块的16个字节里需要1个字节来表示是否有后续块。
一个Block16字节
在这里插入图片描述
1字节 15字节
1字节:0xFF表示没有后续块,其他有后续块。
15字节:用来存储实际的数据。

36个字节分配好后,整个内存由图1变为图2。分配好后返回给用户的是第一个块的索引,这里是块0。
位图(16字节,用128bit表示)
在这里插入图片描述
图2

3.内存释放,只要把多个内存块对应的位图bit值置为0,不需要考虑内存碎片整理。

算法特点:
1.快速分配;
2.无需内存碎片整理。
3.Block的大小可以根据业务需求修改。
算法缺点:
浪费少量内存。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值