数据结构动态存储管理.ppt
《数据结构动态存储管理.ppt》由会员分享,可在线阅读,更多相关《数据结构动态存储管理.ppt(29页珍藏版)》请在课桌文档上搜索。
1、第8章 动态存储管理,8.1 概述,程序执行过程中,(数据)结构中的每一个数据元素都对应一定的存储空间,数据元素的访问都是通过对应的存储单元来进行的。存储空间的分配与管理是由操作系统或编译程序负责实现的,是一个复杂而又重要的问题,现代的存储管理往往采用动态存储管理思想。动态存储管理:如何根据“存储请求”分配内存空间?如何回收被释放的(或不再使用的)内存空间?,对于允许进行动态存储分配的程序设计语言,操作系统在内存中划出一块地址连续的大区域(称为堆),由设计者在程序中利用语言提供的内存动态分配函数(如C的malloc(),calloc(),free()函数,C+的new,delete函数等)来实
2、现对堆的使用。1 两个基本概念 占用块:已分配给用户使用的一块地址连续的内存区域;空闲块:未曾分配的地址连续的内存区域;2 用户请求分配内存,系统的处理方式 当有用户程序进入系统请求分配内存时,系统有两种处理方式:,系统从高地址空闲块中进行分配,直到分配无法进行时,才回收所有用户不再使用的空闲块,重新组织一个大的空闲块来再分配;用户程序一旦运行结束,便将它所占内存区释放成为空闲块,同时,每当新用户请求分配内存时,系统需要巡视整个内存区中所有空闲块,并从中找出一个“合适”的空闲块分配之。对于的情况,系统需建立一张“可利用空间表”。程序运行过程中,不断地对堆中的部分区域进行分配和释放,堆中会出现占
3、用块和空闲块交错的状态,如图8-1所示。,3 动态存储分配的基本问题 当某一时刻用户程序请求分配400个字节的存储空间,如何分配?将块A分配给用户程序?从大块C中划出一部分分配给用户程序?当某一时刻分配B块的用户程序运行结束,B块要进行回收,如何回收?B块直接回收并成为一个独立的空闲块?B块回收并和前、后的空闲块A、C合并后形成一个更大的空闲块?,8.2 可利用空间表及分配方法,可利用空间表中包含所有可分配的空闲块,当用户请求分配时,系统从可利用空间表中删除一个结点分配之;当用户释放其所占内存时,系统即回收并将它插入到可利用空间表中。因此,可利用空间表亦称做“存储池”。,8.2.1 可利用空间
4、表的组织,可用空间表的组织有两种方式:目录表方式和链表方式,如图8-2所示。动态存储管理中需要不断地进行空闲块的分配和释放,对目录表来说管理复杂,因此,可利用空间表通常以链表方式组织。当可利用空间表以链表方式组织时,每个空闲块就是链表中的一个结点。分配时:从链表中找到一个合适的结点加以分配,然后将该结点删除之;回收时:将空闲块插入到链表中。实际的动态存储管理实施时,具体的分配和释放的策略取决于结点(空闲块)的结构。,8.2.2 结点结构方式与分配策略,1 请求分配的块大小相同 将进行动态存储分配的整个内存区域(堆)按所需大小分割成若干大小相同的块,然后用指针链接成一个可利用空间表。分配时:从表
5、的首结点分配,然后删除该结点;回收时:将释放的空闲块插入表头。2 请求分配的块大小只有几种规格 根据统计概率事先对动态分配的堆建立若干个可利用空间链表,同一链表中的结点(块)大小都相同。,分配时:根据请求的大小,将最接近该大小的某个链表的首结点分配给用户。若剩余部分正好差不多是另一种规格大小,则将剩余部分插入到另一种规格的链表中,然后删除该结点;回收时:只要将所释放的空闲块插入到相应大小的表头。存在的问题:当请求分配的块空间大小比最大规格的结点还大时,分配不能进行。而实际上内存空间却可能存在比所需大小还要大的的连续空间,应该能够分配。,3 请求分配的块大小不确定 系统开始时,整个堆空间是一个空
6、闲块,链表中只有一个大小为整个堆的结点,随着分配和回收的进行,链表中的结点大小和个数动态变化。由于链表中结点大小不同,结点中除标志域和链域之外,尚需有一个结点大小域(size),以保存空闲块的大小,如图8-2(b)。问题:若用户请求分配大小为n(kB)的内存,而链表中有若干大小不小于n的空闲块时,如何分配?有3种分配策略。,首次拟合法(First fit)分配时:从表头指针开始查找可利用空间表,将找到的第一个不小于n的空闲块的部分(所需要大小)分配给用户,剩下部分仍然是一个空闲块结点;回收时:将释放的空闲块插入在链表的表头。特点:分配时随机的;回收时仅需插入到表头。最佳拟合法(Best fit
7、)分配时:扫描整个可利用空间链表,找到一个大小满足要求且最接近n空闲块,将其中的一部分(所需要大小)分配给用户,剩下部分仍然是一个空闲块结点;,回收时:只要将释放的空闲块插入到链表的合适位置。为了使分配时不需要扫描整个可利用空间链表,链表组织(块回收时)成按从小到大排序(升序)。优点:适用于请求分配的内存块大小范围较广的系统;缺点:系统容易产生无法分配的内存碎片;无论分配与回收,都需要查找表,最费时;最差拟合法(Worst fit)分配时:扫描整个可利用空间链表,找到一个大小最大的空闲块,将其中的一部分(所需要大小)分配给用户,剩下部分仍然是一个空闲块结点;,回收时:只要将释放的空闲块插入到链
8、表的合适位置。为了使分配时不需要扫描整个可利用空间链表,链表组织(块回收时)成按从大到小排序(降序)。特点:适用于请求分配的内存块的大小范围较窄的系统;分配无需查找,回收需要查找适当的位置。4 选择分配策略需考虑的因素 用户的逻辑要求、请求分配量的大小分布、分配和释放的频率以及效率对系统的重要性。,8.3 边界标识法,边界标识法(Boundary Tag Method)是操作系统中一种常用的进行动态分配的存储管理方法。系统将所有的空闲块链接成一个双重循环链表,分配可采用几种方法(前述)。系统的特点 每个内存区域的头部和底部两个边界上分别设置标识,以标识该区域为占用块或空闲块,在回收块时易于判别
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 动态 存储 管理

链接地址:https://www.desk33.com/p-229810.html