第九章 存储的空间结构.ppt

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

第九章 运行时的存储空间 运行时存储空间的结构和分配 过程活动记录AR 运行时变量的访问 运行时的存储空间结构 要保存的信息: 目标代码;数据;库函数代码; 过程活动的控制信息等 运行时的存储空间结构: 目标程序运行时的活动 活动:过程的一次执行。如果a和b是两个活动,则它们的生存期或者是不重叠的,或者是嵌套的。 活动树:由活动构成的一个树,其中 1)树中的每个节点代表一个活动。 2)树的根节点是程序的主过程(函数)的活动。 3)在树中若b为a的儿子节点,则必有a活动调用了b活动。 4)在树中若a为b的左兄弟节点,则必有a活动先于b活动执行。 名字的作用域和邦定 作用域:一个声明起作用的程序部分称为该声明的作用域。一个名字在程序中只声明一次,该名字在程序运行时也可能代表不同的数据对象。 环境和状态:环境表示将名字映射到存储单元的函数,状态表示将存储单元映射到它所保存的值的函数 。 绑定:如果环境将名字x映射到存储单元s,我们就说x被绑定(binding)到s 。 过程活动记录 过程活动记录(AR):过程的一个现场记录 记录内容: ?过程控制信息:先行活动记录的动态链指针、返回地址、层数和长度等 ?机器状态信息:寄存器状态等 ?全局变量信息:非局部变量的信息 ?局部变量值:形参变量、局部变量和临时变量 AR的结构: 抽象地址分配 I. (?,off)? LabelDec ?(?,off) (?,off)? ConstDec ?(?,off) (?,off)? TypeDec ?(?,off) (?,off)? Var id:T ?(?,off+n) (?,off)? ProcDec ?(?,off) (?,off)? FuncDec ?(?,off) II. (?,off)? Proc p() ?(?+1,off1+?+2) (?,off)? Func f():T ?(?+1,off1+?+2) (?,off)? Proc P() ?(?,off+2) (?,off)? Func F():T ?(?,off+2) III. (?,off)? Var ID:T ?(?,off+1) (?,off)? ID:T ?(?,off+n) IV. (?,off)? Proc p( ?(?+1,off0) (?,off)? Func f( ?(?+1,off0) (?,off)? Proc P( ?(?+1,off0) (?,off)? Fucn F( ?(?+1,off0) 抽象地址分配例子 (?,10)Label 100,200; (?,10)Const pai=3.14; (?,10)Type arr=array[1..10]of integer; (?,10)Var x:integer; (?,11) a:array[1..5]of integer; (?,16)Function f( (?+1,4)Var x:real; (?+1,5) a:arr; (?+1,15)Var c:arr; (?+1,16)Procedure G(); (?+1,18)Function F():real (?+1,20) ):real; (?+1,20+?+2 Begin ……end; (?,16) 目标程序运行时的动作(1) 调用一个过/函时,建立新的活动记录;退出一个过/函时,删除它的当前活动记录。这些工作由目标程序来完成,分别分散在过程调用语句、过程入口和过程出口部分的目标代码中。 过/函调用语句所完成的工作 1)在新建立的活动记录里保存现役活动记录的始地址:0[top]:=sp; 2)在新建立的活动记录里记入先行Display表的始地址: 实在过程语句情形:3[top]:=sp+ Noff。 形式过程语句情形:3[top]:=(第二形参单元)。其中第二形参单元是给形参过程名分配的第二个单元。 3)把实参信息传送到新活动记录区的形参单元中; 4)转向相应过程的目标程序。 5)如果是函数调用,则把函数值读到某寄存器中。 目标程序运行时的动作(2) 过/函入口完成的工作 1)在新建立的活动记录里保存返回地址:1[top]:=返回地址 2)在要建立的新活动记录里生成DISPLAY表:从3[top]所指的先行DISPLAY表自底向上抄录?个单元的内容(?是被调用过程的层数),再添上新的sp值。 3)使新建的活动记录成为现役活动记录: sp:=top;top:=top+Moff 过/函出口完成的工作 1)删除本层活动记录,使动态外层的活动记录

文档评论(0)

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

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

1亿VIP精品文档

相关文档