编译原理课件学习.pptVIP

  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文档。上传文档
查看更多
Thank You That’s all for today. 运行时存储组织 活动记录 过程活动记录举例 控制信息 void p( int a) { float b; float c[10]; b=c[a]; } a b c 函数 p 的活动记录 Offset = 0 Offset = 3 Offset = 4 Offset = 6 Offset = 26 运行时存储组织 活动记录 过程活动记录举例 控制信息 static int N; void p( int a) { float b; float c[10]; float d[N]; float e; … } a b c 函数 p 的活动记录 Offset = 0 Offset = 3 Offset = 4 Offset = 6 Offset = 26 /*d为动态数组*/ 指向 d 的指针 内情向量(N) e d Offset = 27 Offset = 28 Offset = 30 Offset = 30+2N 运行时存储组织 活动记录 含嵌套过程说明语言的栈式分配 主要问题 解决对非局部量的引用(存取) 解决方案 采用 Display 表 为活动记录增加静态链域 运行时存储组织 活动记录 嵌套过程语言的栈式分配 采用 Display 表 (或称全局 Display 表) Display 表记录各嵌套层当前过程的活动记录在运行栈 上的起始位置(基地址) 当前激活过程的层次为K(主程序的层次设为0), 则对应的 Display 表含有 K+1 个单元,依次存放着 现行层,直接外层…直至最外层的每一过程的最新活 动记录的基地址 嵌套作用域规则确保每一时刻Display 表内容的唯一性 Display 表的大小(即最多嵌套的层数)取决于实现 运行时存储组织 活动记录 嵌套过程语言的栈式分配 Display 表方案举例 program Main( I,O); procedure P; procedure Q; procedure R; begin … R; … end; /*R*/ begin … R; … end; /*Q*/ begin … Q; … end; /*P*/ procedure S; begin … P; … end; /*S*/ begin … S; … end. /*main*/ main 的活动记录 P 的活动记录 Q 的活动记录 R 的活动记录 过程 R 被第一次激活后运行栈和 Display 寄存器 D[i] 的情况 S 的活动记录 TOP D[0] D[1] D[2] D[3] 运行时存储组织 活动记录 嵌套过程语言的栈式分配 Display 表的维护(过程被调用和返回时的保存和恢复) 方法一 极端的方法是把整个 Display 表存入活动记录 若过程为第 n 层,则需要保存 D[0] ~D[n] ) 一个过程(处于第 n 层)被调用时,从调用 过程的 Display 表中自下向上抄录 n 个 SP 值,再加上本层的 SP 值 方法二 只在活动记录保存一个的 Display 表项,在静 态存储区或专用寄存器中维护全局 Display 表 运行时存储组织 活动记录 嵌套过程语言的栈式分配 Display 表的维护举例 main 的活动记录 P 的活动记录 Q 的活动记录 Display 表 活动记录中保存完整的Display 表 S 的活动记录 TOP D[0] D[1] D[2] D[3] R 的活动记录 program Main( I,O); procedure P; procedure Q; procedure R; begin … R; … end; /*R*/ begin … R; … end; /*Q*/ begin … Q; … end; /*P*/ procedure S; begin … P; … end

文档评论(0)

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

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

1亿VIP精品文档

相关文档