内存管理的经典算法Buddy

Buddy算法,内存管理的经典算法,主要的目的就是减少内存碎片,增加内存的使用率,在unix和linux中都是使用该算法进行内存分配管理。

以linux为例,在linux中,系统会分配一块free_area的数组,该数组的元素为一内存页块,每向上一级,页块的大小成倍增长,既:1、2、4、8、16、32、64、128….2n,如下图:

[img]http://calmness.iteye.com/upload/picture/pic/13449/f75ae93d-5e2f-343f-b0aa-f3ed98f0e14f.jpg[/img]

内存分配:
当进程向系统请求空间时,内存管理系统将在free_area数组中寻找大小适合空闲块,比如需要分配一块512K的空间,系统会在free_area中寻找大小为512K的快,假设首个内存页块大小为4K,则内核会寻找大小是第一个元素128倍的元素,在free_area中既是对应第7个元素,假如该元素对应的空间已经被分配,系统则会再向上搜索,既搜索第八个元素对应的页块链表,此时如果空间足够,则使用该块进行空间分配,由于该块的大小比所申请的空间大一倍,系统会将该块分割为两半,其中一半用于分配,而另外一半则插入上一元素空间,既free_area中第7个元素。如果仍然没有找到空闲的空间,则继续向上搜索。

内存回收:
内存回收的过程与分配的过程相反,在回收的时候,内核将检测是否存在相同大小的内存块,如果存在,则将它们进行合并,合成一个大小是原来两倍的新的空闲,每次结合完之后,代码还要检查是否可以继续合并成更大的页面。最佳情况是系统的空闲页面块将和允许分配的最大内存一样大。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值