过程与活动过程的每一次运行或执行被称为一次活动.PPTVIP

过程与活动过程的每一次运行或执行被称为一次活动.PPT

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
过程与活动过程的每一次运行或执行被称为一次活动

二. 活动记录 每个活动记录的大小在编译时可以确定( 除动态数据 ),因此以SP为变址器可方便的访问各个数据。 9.3 简单的栈式存储分配 二. C 的过程调用、过程进入、过程返回 2. 过程进入 9.5 堆式动态存储分配 2. 变长块管理 根据用户要求的大小分配空间。 所有的空闲空间组成链表,有申请时从链表中找一块合适的空闲空间分配,分配策略有三种: 首次满足法、最有满足法、 最差满足法。 回收时要进行空闲空间的合并。 * * 过程与活动 过程的每一次运行(或执行)被称为一次活动(activation)。活动是一个动态的概念,除了设计为永不停机的过程(如操作系统等),或者是因设计错误而出现死循环的过程之外,任何过程的活动均有有限的生存期(life time)。 第九章 运行时存储空间组织 概述:编译程序必须分配目标程序运行时的数据空间 9.1目标程序运行时的活动 一. 过程的活动 为讨论方便,将整个程序、函数均视为过程。 一个过程的活动是指该过程的一次执行。 过程的活动生存期是指从该过程体第一步操作到最后一步操作之间的操作序。两个过程的活动生存期或嵌套或不重叠。 一个标识符说明在程序中能起作用的范围称为该说明的作用域。 生存期和作用域将决定分配目标程序数据空间的基本策略。 ex: Fig 9.1 program 例:写出参数传递的结果 Program simple(output); var x:integer; procedure change(y:integer); begin y:=1 end; begin x:=0; change(x); write(x) End. 传值: x=0 传地址: x=1 二、参数传递 :传地址、传值、传名、得结果 9.2 运行时存储器的划分 一、存储器的划分 程序运行时必须由操作系统分配一定的存储空间,编译程序应完成对该存储空间划分: 堆 ↓ ↑ 栈 静态数据 目标代码 存放编译时可确定大小的数据对象 过程的活动在编译时不确定,在运行时当有新过程被调用,则将该过程的相关数据放入栈中,栈的lifo特性正好对应过程的嵌套调用 存放动态数据(如链表等) 为管理过程的活动,用一个活动记录来表示其相应的所有信息: 返回地址 动态链 静态链 形式单元 局部变量 内情向量 临时单元 其中: 1. 临时单元、内情向量、局部变量为局部数据区; 2. 形式单元:存放实在参数的地址或值; 3. 静态链:指向直接外层过程的最新活动记录,用于访问非局部变量; 4. 动态链:指向调用本过程的最新活动记录的起始地址; TOP SP 三. 存储分配策略 静态存储分配:编译时对所有数据对象分配固定的存储单元(地址空间),运行时始终不变。 栈式动态存储分配:每个过程建立活动记录,运行时每当调用一个过程,就将活动记录动态的分配于栈顶,过程活动结束,则活动记录退出栈顶。 堆式动态存储分配:将存储空间组织成堆结构,以便用户可以随时申请或释放存储空间。 一个编译系统采取怎样的分配策略,取决于源语言中作用域及生命期的定义规则。 以C语言为例,由于不允许嵌套定义过程,但允许过程递归调用,因此可采用简单的栈式存储分配。 例有右边的程序结构: 全局数据说明 Main( ) { Main中的数据说明 Q ;} void R( ) { R中的数据说明 } .. void Q( ) { Q中的数据说明 R;} 当 Main调用了Q, Q又调用了R后,其存储空间分配如下: 全局数据区 Main的活动记录 Q的活动记录 R的活动记录 TOP SP TOP:始终指向已占用的栈顶单元。 一. C 的活动记录 老 SP 返回地址 参数个数 形式单元 简单变量 内情向量 临时工作单元 TOP SP 相当于动态链 SP: 总是指向现行过程活动记录的起点,用于局 部数据的访问; 对任何局部变量或形参的引用均可表示为:X[SP], X表示变量的相对地址。 如前所述,过程调用的四元式序列为: par T1 par T2 … par Tn call p, n (i+3)[TOP]:=Ti (传值) 或

文档评论(0)

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

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

1亿VIP精品文档

相关文档