- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
严蔚敏《数据结构(c 语言版)习题集》第8章动态存储管理【荐】.pdf
第八章 动态存储管理
8.11
typedef struct {
char *start;
int size;
} fmblock; //空闲块类型
char *Malloc_Fdlf(int n)//遵循最后分配者最先释放规则的内存分配算法
{
while(Gettop(S,b)b.sizen)
{
Pop(S,b);
Push(T,b); //从栈顶逐个取出空闲块进行比较
}
if(StackEmpty(S)) return NULL; //没有大小足够的空闲块
Pop(S,b);
b.size-=n;
if(b.size) Push(S,{b.start+n,b.size});//分割空闲块
while(!StackEmpty(T))
{
Pop(T,a);
Push(S,a);
} //恢复原来次序
return b.start;
}//Malloc_Fdlf
mem_init()//初始化过程
{
...
InitStack(S);InitStack(T); //S 和T 的元素都是fmblock 类型
Push(S,{MemStart,MemLen}); //一开始,栈中只有一个内存整块
...
}//main
8.12
void Free_Fdlf(char *addr,int n)//与上一题对应的释放算法
{
while(Gettop(S,b)b.startaddr)
{
Pop(S,b);
Push(T,b);
} //在按地址排序的栈中找到合适的插入位置
if(Gettop(T,b)(b.start+b.size==addr)) //可以与上邻块合并
{
Pop(T,b);
addr=b.start;n+=b.size;
}
if(Gettop(S,b)(addr+n==b.start)) //可以与下邻块合并
{
Pop(S,b);
n+=b.size;
}
Push(S,{addr,n}); //插入到空闲块栈中
while(!StackEmpty(T))
{
Pop(T,b);
Push(S,b);
} //恢复原来次序
}//Free_Fdlf
8.13
void Free_BT(Space pav,Space p)//在边界标识法的动态存储管理系统中回收空
闲块p
{
n=p-size;
f=p+n-1; //f 指向空闲块底部
if((p-1)-tag(f+1)-tag) // 回收块上下邻块均为占用块
{
p-tag=0;f-tag=0;
f-uplink=p;
if(!pav)
{
p-llink=p;
p-rlink=p;
}
else
{
q=pav-llink;
p-llink=q;p-rlink=pav;
q-rlink=p;pav-llink=p;
}
pav=p;
}//if
else if(!(p-1)-tag(f+1)-tag) //上邻块为空闲块
{
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,in
您可能关注的文档
最近下载
- 《机械装调技术》电子教案 模块五 整机调试与运行任务一 齿轮啮合齿侧间隙的检测与调整.doc VIP
- 青花瓷 完美演奏版 周杰伦 钢琴谱 数字 简谱.pdf VIP
- 第38届物理竞赛决赛实验考试答题纸 .pdf VIP
- 现代医药物流交易的配送中心建设项目可行性研究报告.doc VIP
- 2025-2026学年初中生物学人教版2024八年级上册-人教版2024教学设计合集.docx
- 养生馆卫生管理制度(3篇).docx
- 健康管理师课件第一章--健康管理概论.ppt VIP
- JBT 4333.4-2013 厢式压滤机和板框压滤机 第4部分:隔膜滤板.pdf VIP
- 电信反诈骗演讲稿模板5篇.docx VIP
- 基于光纤布拉格光栅的温度测量系统设计与应用.docx VIP
文档评论(0)