算法和数据结构AlgorithmsandDataStructures第八章动态存.ppt

算法和数据结构AlgorithmsandDataStructures第八章动态存.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法和数据结构AlgorithmsandDataStructures第八章动态存

算法与数据结构 Algorithms and Data Structures 第八章 动态存储管理 第八章 动态存储管理 8.1 概述 内存是很重要的、很昂贵的资源,如何合理高效地使用这一资源是一个比较复杂的问题。 早期使用低级语言编程,内存管理是由程序员自己负责。程序员负担重,管理水平因人而异,管理效率低,容易出错。 随着操作系统和高级语言的发展,情况不断改善。内存管理分别由操作系统、高级语言的编译系统和程序员分工合作管理。通常编译系统负责静态储存管理,操作系统负责整个内存管理和动态储存管理。 程序员级的管理: 用户程序中所用的储存结构有两种, 静态结构 :空间量在编译后,即可确定 动态结构:程序运行中申请空间,编译时无法确定。 静态储存由编译系统管理。 动态储存由程序员和操作系统管理,但程序员的管理非常简单。程序员的工作就是在需要的时候向系统申请空间,在不需要时释放要来的动态储存空间: C语言中:malloc(size), 申请size字节的内存; free(p), 释放p,归还给系统; C++中: new objectType(), 申请空间; free(p), 释放p,归还给系统; Java语言中: new objectType(), 申请空间; 编译系统级管理 在编译中,编译系统为程序设置了一个虚拟空间,它管理的是虚拟空间。 操作系统级管理: 存储管理是操作系统的重要部分之一,操作系统对储存的管理是才是真实的管理,而且这一管理是很复杂的。 从外部来看,操作系统存储管理系统就是提供存储空间分配和回收服务,但内部实现方法却十分复杂,不同的操作系统采用不同的策略和方法,这些问题将在后续课程操作系统中详细介绍。 这里我们只是站在数据结构的角度来讨论动态存储管理的基本方法,即存储空间的分配和回收基础技术、存储空间的逻辑结构和物理结构。 8.2 可利用空间表 初试状态 经过多次分配、回收之后,形成了多个空闲块,它们之间不连续,如图所示: 可利用空间表的链接顺序有: (1)按块的首地址有低到高链接; (2)按块的大小有小到大链接; (3)按块的大小有大到小链接; 分配: 一般有3种策略,设申请空间的大小为n (1)首次拟合法:从表头开始搜索,遇到第一个尺寸等于大于n的块进行分配; (2)最佳拟合法:搜索整个表,将最小的等于大于n的块进行分配; (3)最差拟合法:搜索整个表,将最大块进行分配(等于大于n ); 分配过程: 找到合适的空闲块p; P.size等于n或比n大少许(一般设定一个量s),则将p从表中删除,进行分配; 若p.sizen+s,从p的下部切割size为n的一块进行分配,如图所示:n=16k 回收: 程序释放空间(如free(p))、程序运行结束后将占用的块归还系统,如果收回的块的相邻块是空闲的,需要合并它们。 回收过程:设释放块是p,大小为size。 (1) 设置p .tag=0; (2)判断p的下相邻块q是否空闲 若空闲:从可利用空间表摘出q,置p.size=p.size+q.size(合并); (3)判断p的上相邻块r是否空闲 若空闲:合并r和p,r.size=r.size+p.size 否则:将p插入可利用空间表。 例如: 有时也不必马上合并,如果释放块p的大小恰好符合下次申请空间的要求,可以将p分配,而不必从可利用空间表中切割分配。 例如,一个使用单链表的程序,它会不断地申请和释放同类型的结点(块大小相等), 回收时不进行合并,而是放在另一个链表avail中; 分配时首先从avail取一个块分配,当avail中没有空闲块时在从free表里分配。 这样就省去了不断地合并切割的麻烦,可以提高效率。 对于一些小的操作系统,内存管理相对简单些。在许多专用设备、智能仪表和家用电器等都使用一种小型的、高效的、简单的操作系统,一般称之为“嵌入式操作系统”。 下面介绍一些实用而简单的动态存储管理系统。 8.3 伙伴系统(Buddy system) 特点: (1)分配块的大小均是2k ; (2)分配和回收简单 可利用空间表结构: 伙伴系统抽象数据类型 ADT BoddySystem Data : int m // 可用内存2m

文档评论(0)

jyf123 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:6153235235000003

1亿VIP精品文档

相关文档