第九章目标程序运行时存储空间组织.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文档。上传文档
查看更多
第九章 目标程序运行时存储空间组织 9.1目标程序运行时的活动 9.2 运行时存储器的划分 9.3 静态存储分配 9.4 简单的栈式存储分配 9.5 嵌套过程语言的栈式存储分配 9.6 堆式存储分配 9.1 目标程序运行时的活动 9.1.1 过程的活动 过程:过程名、过程体 过程调用:过程名出现在可执行语句里时,称这过程在这一点被调用。 过程的活动:该过程的一次执行。 活动生存期:从执行该过程体第一步操作到最后一步操作之间的操作序,包括它执行时调用其它过程花费的时间。 过程的递归:该过程在没有退出当前活动时。又开始其新的活动。 作用域:一个说明在程序里能起作用的范围。 静态和动态 静态 如果一个名字的性质通过说明语句或隐或显的规则而定义,则称这种性质是“静态”确定的。 动态 如果名字的性质只有在程序运行时才能知道,则称这种性质为“动态”确定的。 9.1.2 参数传递 参数:形参、实参 传递方式: 传地址:把实在参数的地址传递给相应的形参。 过程段中的每个形参都有一个相应的单元,称为形式单元。形式单元将用来存放相应的实在参数的地址。 传值:将实参的值抄入形式单元中。 传名(换名):将过程体中的形参全部换成相应的实参。(这种文字上的替换称为宏扩展) 9.1.3生成目标程序 中间程序静态文本?目标程序 运行时动作及为实现其动作的准备 (与运行时数据对象的表示有关) 过程定义:过程名,过程体?目标程序 执行过程体 控制数据对象的分配,为执行过程体使用 目标程序中不同的数据空间 如果一个过程是递归的,这时同一个名字在不同的时间可能代表不同的存储单元 9.2 运行时存储器的划分 运行时的存储器划分图 活动记录 为了管理过程在一次执行中所需要的信息,使用一个连续的存储块,称为活动记录。 活动记录结构 存储分配策略: 静态分配 栈式动态分配 堆式动态分配 采用分配策略的依据: 根据程序语言关于名称的作用域和生存期的定义规则。 9.3 静态存储分配 如果在编译时就能够确定一个程序在运行时所需的存储空间大小,则在编译时就能够安排好目标程序运行时的全部数据空间,并能确定每个数据项的单元地址,存储空间的这种分配方法叫做静态分配。 静态存储分配是一种最简单的存储管理。 一般而言,适于静态存储分配的语言必须满足以下条件: (1) 数组的上下界必须是常数; (2) 过程调用不允许递归; (3) 不允许采用动态的数据结构(即在程序运行过程中申请和释放的数据结构)。 可进行静态分配的语言有:FORTRAN、BASIC 以FORTRAN语言来说,其特点是不允许过程有递归性,每个数据名所需的存储空间大小都是常量(即不允许含可变体积的数据,如可变数组),并且所有数据名的性质是完全确定的(不允许出现在运行时再动态确定其性质的名字这种情况)。这些特点确保整个程序所需数据空间的总量在编译时是完全确定的,从而每个数据名的地址就可静态地进行分配。 9.4 简单的栈式存储分配 栈式存储分配法:存储区组成一个栈,每当进入一个过程(或函数)就有一个相应的活动记录累筑于栈顶,从而形成过程工作时的完整数据区。 简单栈式存储分配 我们首先考虑一种简单程序语言的实现,这种语言没有分程序结构,过程定义不允许嵌套,但允许过程的递归调用,允许过程含有可变数组。这时关于局部名称的存储分配,可以直接采用栈式存储分配策略。 C语言除不允许含有可变数组外,就是这样一种语言。C语言的程序结构如下: 全局数据说明 main(?) { main中的数据说明 } void R(?) { R中的数据说明 } void Q( ) { Q中的数据说明 } 主程序调用Q,Q又调用R时的C语言存储空间组织: 非局部变量的分配:C语言不允许过程(函数)定义嵌套,因此,C语言的非局部变量仅能出现在源程序头,因此非局部变量可采用静态存储分配并在编译时确定它们的地址。 局部变量的分配:过程的每一局部变量或形参在活动记录中的位置都是确定的;也就是说,这些变量或形参所分配的存储单元其地址都是相对于活动记录的基址SP的。因此,变量和形参运行时在栈上的绝对地址是: 绝对地址=活动记录基址(SP)+相对地址 记录为变址访问X[SP]。X:相对地址 C过程的执行 1.过程调用 过程调用的四元式序列为: par T1 par T2 …… par Tn call P,n 此时TOP是指向被调用过程P之前的栈顶,而P的形式单元和活动记录起点之间的距离是确定的(等于3),因而由调用者过程给将要被调用的过程P的活动记录(正在形成中)的形式单元传递实参值或实参地址,即每个par

文档评论(0)

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

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

1亿VIP精品文档

相关文档