算法与数据结构:第八章 动态存储管理.pptVIP

算法与数据结构:第八章 动态存储管理.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构---第八章 动态存储管理 第八章 动态存储管理 8.1 概述 8.2 边界标识法 8.3 伙伴系统 8.4 无用单元收集 8.5 存储紧缩 习题 8.1 概述 [动态存储管理] 指系统随机地根据用户程序申请空间的大小,进行分配空间和回收不用空间所进行的内存管理。 [动态存储管理的一种方法] 建立可利用空间表(自由空间表/存储池),将所有可利用的空闲内存块链接起来。 [三种基本分配策略] 首次拟合法:分配找到的第一个不小于n的空闲块 的一部分。操作方便,查找快捷 最佳拟合法:分配不小于n且最接近n的空闲块的一部分。尽可能将大的空闲块留给大程序使用 最差拟合法:分配不小于n且是最大的空闲块的一部分。尽可能减少分配后无用碎片 8.2 边界标识法—双向循环链表的应用 8.2.1 可利用空间表的结点结构 llink tag size rlink space uplink tag 8.2.2 分配算法 (申请容量为n的存储空间) 假设采用首次分配法,为避免过多碎片,设一常量e m-n ? e 将大小为m的块全部分出 e 分出n大小,剩余留下 为使分配后剩余的小块均匀分布在链表中,可利用空间链表的头指针pav在每次分配之后,指向被分配块的后继块 8.2.3 回收算法 设释放块的首地址指针为p,大小为n,分四种情况: 1) (p-1)-tag=1 且 (p+n)-tag=1 释放块的左右邻块均为占用块 将释放块插入到pav所指的结点之后或之前; 2) (p-1)-tag=0 且 (p+n)-tag=1 释放块的左邻块为空闲块,右邻块为占用块 将释放块合并到左邻块的底部,并修改相应的信息; 3) (p-1)-tag=1 且 (p+n)-tag=0 释放块的左邻块为占用块,右邻块为空闲块 将释放块合并到右邻块的顶部,并修改相应的信息 4) (p-1)-tag=0 且 (p+n)-tag=0 释放块的左右邻块均为空闲块 从链表上删除右邻块,将释放块和右邻块一起合并到左邻块的底部 比较边界标志法分别采用最佳适配和首次适配策略时,在数据结构、分配算法和回收算法上有何不同。 最佳适配 首次适配 数据结构 分配算法 回收算法 8.3 伙伴系统—索引+双循环链表 [伙伴系统原理] 伙伴系统的空闲块大小以2k(k=0,1,2,…,m) 标定。按k值不同组织成多个双循环链表。 系统起始时只有一个空闲块, 大小为 2m 。 用户申请内存时,就将刚好满足用户需求的 2k大小的空闲块分配给用户;若不存在 2k 大小的空闲块,就找到k值更大的空闲块,将其分为两半(互称伙伴),按此直至分出2k大小给用户,被分出的其它空闲块加入对应的循环链表中。 回收时,只有伙伴才合并,并将合并后的新空闲块加入上一级大小的空闲块链表中。 [“伙伴”的概念] 当把一个存储块分为大小相等的两半时,则它们互为伙伴。 [大小为2k的伙伴的首地址之间的关系] 起始地址为p,大小为2k的内存块,其伙伴的起始地址为: buddy(p, k)= p+2k =xx..x100...0 当 p mod 2k+1 =0 p-2k = xx..x000...0 当 p mod 2k+1 =2k 8.3.1 可利用空间表的结点结构 llink tag kval rlink space [存储管理方式] 按k值索引,相同k值 的块构成子表(双链表) 8.3.2 分配算法 (申请容量为n的存储空间) [算法思想] 1)计算k值:k=?log2n? 2)从子表k开始找可用的块 2.1)k子表有,取出分配,结

文档评论(0)

学习让人进步 + 关注
实名认证
文档贡献者

活到老,学到老!知识无价!

1亿VIP精品文档

相关文档