第九章运行时空间组织-公开课件(讲义).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文档。上传文档
查看更多
主要内容 目标程序运行时的活动 存储分配策略 简单栈式存储分配 C语言的存储组织 过程的执行 程序单元 FORTRAN的子例程(subroutine) PASCAL的过程/函数(procedure/function) C的函数 程序单元的激活(调用)与终止(返回) 过程与活动 过程的每一次运行(或执行)被称为一次活动(activation)。活动是一个动态的概念,除了设计为永不停机的过程(如操作系统等),或者是因设计错误而出现死循环的过程之外,任何过程的活动均有有限的生存期(life time)。 程序单元的执行需要: 代码段+活动记录(程序单元运行所需的额外信息,如参数,局部数据,返回地址等) 活动记录 为了管理过程在一次执行中所需要的信息,使用一个连续的存储块,这个连续的存储块称为活动记录(Activation record) 活动记录的结构及内容 指针SP指向现行过程的活动记录在栈里的起始位置。 TOP:活动记录的栈顶 常见的存储分配策略 静态分配策略 动态分配策略 栈式动态分配策略 堆式动态分配策略 存储分配策略 静态分配策略:如 FORTRAN 不允许过程递归 不含可变体积的数据对象,或待定性质的名称 因此编译时能完全确定每个数据项存储空间的位置情况 动态分配策略:如 PASCAL,C 允许过程递归 允许动态申请和释放存储空间 因此,编译时不能完全确定数据项的性质,大小等,如, 允许递归过程和可变数组,名字作用域和生存期满足分程序结构所限定的作用范围. 动态分配策略 栈式动态分配策略 内存先申请先释放 堆式动态分配策略 内存申请和释放不遵循先请后放时,一般的处理方法是:让运行程序持有一个大存区(称为堆),凡申请者从堆中分给一块,凡释放者归还给堆 动态存储分配 --- 简单栈式 要求: 1, 没有分程序结构; 2, 过程定义不允许嵌套; 3, 允许过程递规调用; C程序结构 全局数据说明 main(?) { main中的数据说明 } void R(?) { R中的数据说明 } void Q( ) { Q中的数据说明 } C 的活动记录 连接数据(两项): 老SP值(即前一活动记录的起始地址) 返回地址; (2) 参数个数; (3) 形式单元(存放实在参数的值或地址); (4) 过程的局部变量(简单变量)、数组的内情向量和临临时工作单元。 C 的活动记录 堆式动态存储分配 堆变量 堆空间的管理策略 减少碎片的技术 空间的释放 需求: 一个程序语言允许用户自由地申请数据空间和退还数据空间,或者不仅有过程而且有进程(process)的程序结构。 操作: 堆提供两个操作,分配操作和释放操作 情况: 经一段运行时间之后,这个大空间就必定被分划成许多块块,有些占用,有些无用(空闲)--碎片问题 堆式动态储分配 当运行程序要求一块体积为N的空间时,我们应该分配哪一块给它呢? 运行程序要求一块体积为N的空间,但发现没有比N大的空闲块了,然而所有空闲块的总和却要比N大得多。 如果运行程序要求一块积为N的空间,但所有空闲块的总和也不够N,那又应怎么办呢? 有的管理系统采用一种叫做垃圾回收的办法来对付这种局面。即寻找那些运行程序己无用但尚未释放的占用块。 堆管理 堆空间的管理策略 减少碎片的技术 空间的释放 堆空间的管理策略 1 定长块管理 2 变长块管理 1 定长块管理 堆式动态储分配最简单的实现是按定长块进行。初始化时,将堆存储空间分成长度相等的若干块,每块中指定一个链域,按照邻块的顺序把所有块链成一个链表,用指针available指向链表中的第一块。 分配时每次都分配指针available所指的块,然后available指向相邻的下一块。归还时,把所归还的块插入链表。考虑插入方便,可以把所归还的块插在available所指的块之前,然后available指向新归还的块。 2 变长块管理 除了按定长块进行分配之外,还可以根据需要分配长度不同的存储块,可以随要求而变。按这种方法,初始化时存储空间是一个整块。按照用户的需要,分配时先是从一个整块里分割出满足需要的一小块,以后,归还时,如果新归还的块和现有的空间能合并,则合并成一块;如果不能和任何空闲块合并,则可以把空闲块链成一个链表。再进行分配时,从空闲块链表中找出满足需要的一块,或者整块分配出去,或者从该块上分割一小块分配出去。 若空闲块表中有若干个满足需要的空闲块时,该分配哪一块呢?通常有三种不同的分配策略 不同的情况应采用不同的方法。通常在选择时需考虑下列因素:用户的要求;请求分配量的大小分布;分配和释放的频率以及效率对系统的重要等等。 (1)首次满足法:只要在空闲块链表中找

文档评论(0)

小红帽 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档