转】OSAL内存管理2

【转】OSAL内存管理2

在可变长度中申请内存时, 它是从ff2(可变内存分配区域开始处)开始查找有没有处于非使用状态的内存块(即查找内存控制块头中的使用标记),如果找到了一个没有使用的内存块,则把它的大小和要申请的内存的大小相比较,如果要申请的内存块的大小 小于 此内存块的大小则先保留指向此内存块的指针,并跳出循环, 如果申请的内存块的大小 大于 此内存块的大小 , 则查询下一个内存块是否处于使用状态, 如果处于非使用状态, 则把这第一个内存控制块头中的长度加上这一个内存块的长度(相当于把这两个内存块合并在一起), 再和要申请的内存大小进行比较, 如果大于要申请的内存的大小,则保留指向此内存块的指针并跳出循环。如果仍小于要申请的内存大小, 则再检测下一下内存块的使用状态。 如果在合并的过程中如果出现某个内存块正在使用的情况, 它就会跳过这一个内存控制块, 然后重新开始在这个正在使用的内存控制块的后面查找有没有合适内存块,前面合并的内存块则抛弃(即不在参于内存块的合并)。

总的来说查找过程: 假设我们有5个内存块, 第一块的大小是1, 第二块的大小是2, 第三块的大小是3, 第四块的大小是4, 第五块的大小是5.。在这5块内存块中只有第三块处于使用状态。 现在如果我们想申请一个大小是5的内存,它大致的过程是这样的:它首先检索到内存块一,它处理非使用状态,但是它的大小 小于 5, 则它检测下一个内存块的状态,第二个内存块的状态也是处于非使用, 则把内存块二和内存块一合并在一起, 合并后的大小是3, 再把3和要申请的内存块大小5 比较, 合并后的大小仍小于要申请的大小, 则再检测下一个内存块的使用状态, 下一个内存块三正处于使用中, 则跳过内存块三, 从第四内存块开始重新检索申请的内存块的大小, 第四个内存块的大小是4, 它小于5, 则检测第四个内存块的下一个内存块(内存块5), 第五内存块处于非使用状态, 则把第四内存块和第五内存块合并, 它们合并后的大小是9 , 大于要申请的内存块的大小5,返回指向第四内存块的指针, 第四内存块的大小是是它合并第五内存块的大小(相当于第五内存块已经并入了第四内存块)。

OSAL内存管理3: http://blog.sina.com.cn/s/blog_4c8287230100d5i4.html

Thanks moolight!!

本文是moolight(QQ :329836790)原创,转载必须保证文章的完整性并标明出处,请尊重作者,支持原创。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值