- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8数据结构——第八章——动态存储管理
第8章 动态存储管理 8.1概述 程序执行过程中,(数据)结构中的每一个数据元素都对应一定的存储空间,数据元素的访问都是通过对应的存储单元来进行的。存储空间的分配与管理是由操作系统或编译程序负责实现的,是一个复杂而又重要的问题,现代的存储管理往往采用动态存储管理思想。 动态存储管理:如何根据“存储请求”分配内存空间?如何回收被释放的(或不再使用的)内存空间? 对于允许进行动态存储分配的程序设计语言,操作系统在内存中划出一块地址连续的大区域(称为堆) ,由设计者在程序中利用语言提供的内存动态分配函数(如C的malloc() ,calloc(),free()函数,C++的new,delete函数等)来实现对堆的使用。1 两个基本概念◆ 占用块:已分配给用户使用的一块地址连续的内存区域;◆ 空闲块:未曾分配的地址连续的内存区域;2 用户请求分配内存,系统的处理方式 当有用户程序进入系统请求分配内存时,系统有两种处理方式:⑴ 系统从高地址空闲块中进行分配,直到分配无法进行时,才回收所有用户不再使用的空闲块,重新组织一个大的空闲块来再分配;⑵ 用户程序一旦运行结束,便将它所占内存区释放成为空闲块,同时,每当新用户请求分配内存时,系统需要巡视整个内存区中所有空闲块,并从中找出一个“合适”的空闲块分配之。 对于⑵的情况,系统需建立一张“可利用空间表” 。 程序运行过程中,不断地对堆中的部分区域进行分配和释放,堆中会出现占用块和空闲块交错的状态,如图8-1所示。?11000H12004H12196HA12240HBC130EFH?图8-1 堆的状态3 动态存储分配的基本问题⑴ 当某一时刻用户程序请求分配400个字节的存储空间,如何分配?◆ 将块A分配给用户程序?◆ 从大块C中划出一部分分配给用户程序?⑵当某一时刻分配B块的用户程序运行结束,B块要进行回收,如何回收? ◆ B块直接回收并成为一个独立的空闲块? ◆ B块回收并和前、后的空闲块A、C合并后形成一个更大的空闲块?8.2 可利用空间表及分配方法 可利用空间表中包含所有可分配的空闲块,当用户请求分配时,系统从可利用空间表中删除一个结点分配之;当用户释放其所占内存时,系统即回收并将它插入到可利用空间表中。因此,可利用空间表亦称做“存储池”。8.2.1 可利用空间表的组织 可用空间表的组织有两种方式:目录表方式和链表方式,如图8-2所示 。动态存储管理中需要不断地进行空闲块的分配和释放,对目录表来说管理复杂,因此,可利用空间表通常以链表方式组织 。 当可利用空间表以链表方式组织时,每个空闲块就是链表中的一个结点。◆ 分配时:从链表中找到一个合适的结点加以分配,然后将该结点删除之;◆ 回收时:将空闲块插入到链表中。 实际的动态存储管理实施时,具体的分配和释放的策略取决于结点(空闲块)的结构。起始地址 空闲块大小 使用情况216EFH 69632空闲12004H 4498空闲 0 69632 ? 0 106710 449800000H13740H 10671空闲?av11000H12004H13196H(b)目录表方式13740H160EFH(c)链表方式216EFH326EFH(a)堆的状态图8-2动态存储管理过程中的内存状态和空闲表结构8.2.2结点结构方式与分配策略1 请求分配的块大小相同 将进行动态存储分配的整个内存区域(堆)按所需大小分割成若干大小相同的块,然后用指针链接成一个可利用空间表。◆ 分配时:从表的首结点分配,然后删除该结点;◆ 回收时:将释放的空闲块插入表头。2 请求分配的块大小只有几种规格 根据统计概率事先对动态分配的堆建立若干个可利用空间链表,同一链表中的结点(块)大小都相同。◆ 分配时:根据请求的大小,将最接近该大小的某个链表的首结点分配给用户。若剩余部分正好差不多是另一种规格大小,则将剩余部分插入到另一种规格的链表中,然后删除该结点;◆ 回收时:只要将所释放的空闲块插入到相应大小的表头。存在的问题: 当请求分配的块空间大小比最大规格的结点还大时,分配不能进行。而实际上内存空间却可能存在比所需大小还要大的的连续空间,应该能够分配。3 请求分配的块大小不确定 系统开始时,整个堆空间是一个空闲块,链表中只有一个大小为整个堆的结点,随着分配和回收的进行,链表中的结点大小和个数动态变化。 由于链表中结点大小不同,结点中除标志域和链域之外,尚需有一个结点大小域(size),以保存空闲块的大小,如图8-2(b)。 问题:若用户请求分配大小为n(kB)的内存,而链表中有若干大小不小于n的空闲块时,如何分配?有3种分配策略。⑴ 首次拟合法(First fit)◆ 分配时:从表头
您可能关注的文档
最近下载
- 《SPSS实战与统计思维》读书笔记.pptx VIP
- 2025年新疆投资发展(集团)有限责任公司及所属公司公开招聘(42人)笔试备考试题及答案解析.docx VIP
- 《应急救援技能培训》课件.ppt VIP
- 临床技术操作规范-妇产科(11版).doc
- ISO 14001 2015 中英文.doc VIP
- 2025辽宁省交通建设投资集团有限责任公司招聘16人笔试历年参考题库附带答案详解.docx
- 2025年水平定向钻市场调查报告.docx
- 美国发展历程.ppt VIP
- 【农业农村部】中国农业展望报告(2025—2034).docx
- DB34_T4098.2-2022_建筑固废再生作道路材料应用技术规程第2部分:路基工程_安徽省.docx VIP
文档评论(0)