全文预览

22大学课件动态存储管理

上传者:苏堤漫步 |  格式:ppt  |  页数:22 |  大小:0KB

文档介绍
间,必须是sizeof(structBLK)的倍数*/?structBLK*rlink;};#defineFootLoc(p)\(structBLK*)((char*)p+sizeof(structBLK)+p->size)分配算法将所有的空闲块链接在一个双重循环链表结构的可利用空间表中;分配可按首次拟合法或最佳拟合法进行;为避免过多碎片,设一常量EPSILONm-nEPSILON将大小为m的块全部分出>EPSILON分出n大小,剩余留下分配算法描述void*mem_alloc(intnbytes){#defineusizeof(structBLK);修正nbytes=(nbytes+u-1)/u*u;/*u为2n有:nbytes=(nbytes+u-1)&~(u-1)*/从链表中找满足size>=nbytes的块p;if(p==NULL)returnNULL;if(p->size–nbytes<=EPSILON){p脱离空闲链;p->tag=FootLoc(p)->tag=1;returnp+1;}else{p->size-=nbytes+2*sizeof(structBLK);f=FootLoc(p);f->tag=0;f->uplink=p;p=f+1;p->tag=1;p->size=nbytes;f=FootLoc(p);f->tag=1;f->uplink=p;returnp+1;}}回收算法根据回收缓冲区地址,找到当前内存块的管理信息p=(structBLK*)buf–1;与此内存块紧邻的,处于高地址端的内存块的管理信息h=(structBLK*)((char*)(p+2)+p->size);与此内存块紧邻的,处于低地址端的内存块的管理信息l=(p-1)->uplink;判l->tag和h->tag,知低端/高端内存块是否空闲,决定是否和低端/高端空闲块合并

收藏

分享

举报
下载此文档