正在加载图片...
q=(p-1)->uplink; f->uplink=q else if(p-1)>tag&&l(f+1)>ag)/下邻块为空闲块 q=f+1; s=q->link t=q->rlink; p->ink=s p->rlink=t S->rlink=p: t->llink p->sIze+=q->sIze (q+q->size-1)->uplink=p p->tag=0 else∥上下邻块均为空闲块 s=(p-1)->uplink; t=f+1 t->llink->rlink=t->rlink t->rlink ->llink=t->llink (t+t->size-1)->uplink }/ Free bt,该算法在课本里有详细的描述 8.14 void free_BS( freelist& Avail,char*addr,ntny伙伴系统的空闲块回收算法 buddy=addr%(2*n)?( addr-n)(addr+n,/求回收块的伙伴地址 addr->kvaln for(i=0; avail[ i]. nodesize<n计+);∥找到这一大小的空闲块链 if(lavail[]. first)∥尚没有该大小的空闲块 addr ->llinkeadd addr->rlink-addr aval]fist=addr,∥作为唯一一个该大小的空闲块 else for(p=aval[ first; p!- buddy&&pl= avail[D] first; p=p>rink/寻找伙伴 flp= buddy)/伙伴为空闲块,此时进行合并q=(p-1)->uplink; q->size+=n; f->uplink=q; f->tag=0; } else if((p-1)->tag&&!(f+1)->tag) //下邻块为空闲块 { q=f+1; s=q->llink;t=q->rlink; p->llink=s;p->rlink=t; s->rlink=p;t->llink=p; p->size+=q->size; (q+q->size-1)->uplink=p; p->tag=0; } else //上下邻块均为空闲块 { s=(p-1)->uplink; t=f+1; s->size+=n+t->size; t->llink->rlink=t->rlink; t->rlink->llink=t->llink; (t+t->size-1)->uplink=s; } }//Free_BT,该算法在课本里有详细的描述. 8.14 void Free_BS(freelist &avail,char *addr,int n)//伙伴系统的空闲块回收算法 { buddy=addr%(2*n)?(addr-n):(addr+n); //求回收块的伙伴地址 addr->tag=0; addr->kval=n; for(i=0;avail[i].nodesize<n;i++); //找到这一大小的空闲块链 if(!avail[i].first) //尚没有该大小的空闲块 { addr->llink=addr; addr->rlink=addr; avail[i].first=addr; //作为唯一一个该大小的空闲块 } else { for(p=avail[i].first;p!=buddy&&p!=avail[i].first;p=p->rlink);//寻找伙伴 if(p==buddy) //伙伴为空闲块,此时进行合并 {
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有