动态存储器分配伙伴系统(buddy system)

伙伴系统是分离适配器的一个特例,其中每个大小类都是2的幂。
1>假设一个堆的大小为2^m个字
2>我们为每个块的大小2^k维护一个分离空闲链表,其中0<=k<=m。
3>请求块的大小向上舍入到最接近的2 的幂,最开始时,只有一个大小 为 2^m个字的块。
4>为了分配一个大小为2k的块,我们找到一个可用的大小为2j的块,其中k<=j<=m,如果j = k 我们就完成了。否则,我们递归的二分割这个块,知道j = k。当我们进行这样的分割的时候 ,每个剩下的半块(也叫做伙伴)被放置在相应的空闲链表中。
5>要释放一个大小为2^k的块我们继续合并空闲的伙伴。当我们遇到一个已分配的伙伴时,我们就停止合并。

伙伴系统的优点是给定地址和块的大小时,很容易计算出它的伙伴的地址。例如一个块大小为32字节 地址为
xxx…00000
它的伙伴的地址为
xxx…10000
一个块的地址和它的伙伴的地址只有一位不相同。
伙伴系统分配器的主要优点是快速搜索快速合并。
缺点:要求块的大小为2的幂可能导致显著的内碎片。不适合通用目的的工作负载。
(下面源自百度)
把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页框块。最大可以申请1024个连续页框,对应4MB大小的连续内存。每个页框块的第一个页框的物理地址是该块大小的整数倍。

假设要申请一个256个页框的块,先从256个页框的链表中查找空闲块,如果没有,就去512个页框的链表中找,找到了则将页框块分为2个256个页框的块,一个分配给应用,另外一个移到256个页框的链表中。如果512个页框的链表中仍没有空闲块,继续向1024个页框的链表查找,如果仍然没有,则返回错误。

页框块在释放时,会主动将两个连续的页框块合并为一个较大的页框块。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从一而终

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值