[2018年最新整理]《数据结构》课件(C语言)第08章.pptVIP

[2018年最新整理]《数据结构》课件(C语言)第08章.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文档。上传文档
查看更多
[2018年最新整理]《数据结构》课件(C语言)第08章

《数据结构》 第八章 动态存储管理 内容和要求 可利用空间表及分配方法 边界标识法 伙伴系统 无用单元收集 存储紧缩 动态存储管理的基本问题及方法 存储管理是一个既复杂而又重要的问题。在后续课程——操作系统和编译技术(或方法、原理)中,将对其作较深入的研究。在数据库技术中,也涉及大量有关存储管理的问题。本章仅就动态存储管理方面一些基本技术进行讨论。 动态存储管理的基本问题 (1) 如何按用户提出的“请示”分配内存? (2) 如何回收那些用户不再使用而“释放”的内存,以备新的“请示”产生时重新进行分配? 在计算机系统中,存储管理的分级 (1) 操作系统为进程分配所需要的存储空间,以便能在机器上运行。一旦运行结束从系统撤离时,操作系统就回收进程所使用的空间。此类存储管理问题将在《操作系统》课程中讨论。 一些有关存储管理的重要问题 (1) 由谁来负责存储空间的分配与回收?是用户自身,还是由系统的一个专门子系统为用户分配并发现不再使用的空间而加以回收? 两个术语 占用块 称已分配给用户使用的地址连续的内存区为占用块。在不同的动态存储管理系统中,请求分配的内存量大小不同,可能小到几个字节,多至若干k字节。但系统每次分配给用户的都是一个地址连续的内存区。 可利用空间表及分配方法 可利用空间表中包含所有可分配的空闲块,每一块是链表中的一个结点。当用户请示分配时,系统从可利用空间表中删除一个结点分配之;当用户释放其所占内存时,系统即回收该内存区并将它插入到可利用空间表中。 分配策略一:首次拟合法 从空闲块链表的表头指针开始查找,找出首先能满足请求容量的存储块,将其中一部分分配给用户。可利用空间表本身既不按结点的初始地址有序,也不按结点的大小有序。在回收时,只要将释放的空闲块插入在链表的表头即可。 分配策略二:最佳拟合法 从空闲块链表中找出能满足用户请求容 量的最小空闲块。显然这是一种较好的方法,但为了满足某个请示分配,需要对空闲块链表从头至尾扫描,时间开销大。 分配策略三——最差拟合法 其指导思想是每次都用空闲块链表中最大的空闲块去满足请求分配,所以若链表中诸结点不是按容量大小排列的话,则每次分配都扫描整个链表,即检测n次。但是,如果将链表结点按空闲块容 量的不增次序排列,则满足一次请求分配仅需检测一次即可。而回收一个空闲块将其插入空闲块链表时,同样需平均检测n/2次。 边 界 标 识 法 边界标识法 (Boundary Tag Method)是操作系统中用以在运行期间对用户所请求的随意内存块大小进行动态分区分配的一种存储管理方法。 空闲块链表是个双向循环链表结构。分配策略或采用首次拟合法,或采用最佳拟合法。 可利用空间表的结构 边界标识法中的结点结构 其中 head:结点的头部地址 foot:结点的底部地址 space:一组地址连续的待分配存储单元 tag:标志域,tag=0表示空闲块,tag=1表示占用块 size:整个结点的大小,包括头部header和底部footer所占空 间(设各占1个字),但在分配时忽略不计 llink:指向双向循环链表中本结点的前趋结点的指针 rlink:指向双向循环链表中本结点的后继结点的指针 uplink:指向本结点的指针,其值即为该内存块的首地址 边界标识法分配算法 设采用首次拟合法进行分配,并约定 回收算法 一旦用户释放占用块,系统应立即回收以备新的请求产生时进行再分配。为了使物理地址相紧邻的空间闲块能结合成一个尽可能大的结点,需检查刚释放的占用块的左、右紧邻是否空闲块,若是则合并。 伙伴系统(Buddy System)是操作系统中用到的另一种动态存储管理方法。所谓伙伴系统是指存储区中有一定地址关系且容量相等的一对存储块。伙伴系统中为避免出现许多明显的链域,使用了隐含的寻址规则,它是伙伴系统可用性的基础。如果知道某存储块的地址和容量,也就能够确定它的伙伴存储块。这就要求并约定存储区中的所有存储块容量都必须是2的幂。 在伙伴系统中,无论是占用块或空闲块,其大小均为2的幂次。当用户申请n个字的存储区,则分配的占用块为2k个字,这里k满足2k-1<n≤2k. 可利用空间表的结构 伙伴系统中的可利用空间表由若干个子表组成,每个子表是一个双向循环链表。对于总内存空间为2m字的一个系统,可以有m+1个这样的子表,它们以向量形式连接在一起。 双向

您可能关注的文档

文档评论(0)

liwenhua11 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档