编译原理 之 目标程序运行时存储组织.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文档。上传文档
查看更多
第十章 目标程序运行时的存储组织 概述 静态存储组织 栈式动态存储组织 堆式动态存储组织 参数传递 概述 高级语言支持的概念 Type value expression Variable procedure Function parameters 目标机支持的概念 bits bytes words Registers Stack address Routine(sub routine) 代码生成前如何安排目标机资源 运行时组织的几个问题 数据表示—如何在目标机中表示每个源语言类型的值 表达式求值—如何组织表达式的计算 存储分配—如何组织不同作用域变量的存储 过程实现—如何以例程实现过程,函数,参数传递 任务:编译程序对目标程序运行时的组织(设计运行环境和分配存储),如通常存储区布局可为: 运行环境和存储分配设计分析 逻辑阶段:在目标代码生成前,作准备 实质: 关联(Binding) 将源程序的文本 ? 程序运行动作的实现 源文件中的名字N ? 运行时的存储S 在语义学中,使用术语environment函数表示 env: N→S (N到S的映射),名字到存储位置的映射. State:存储位置到值的映射. 数据表示:各种数据对象的存储分配 数据对象的属性 name 名字,名称 type 类型 location 内存地址 value 值 component 成分(构成) 数据表示(固定长度,直接或间接表示) 简单变量: char: 1 byte integers: 2 or 4 bytes floats: 4 to 16 bytes booleans: 1 bit (but usually 1 byte) 指针:unsigned integers 一维数组:一块连续的存储区 多维数组:一块连续的存储区,按行存放 结构(记录):把所有域(field)存放在一块连续的存储区 对象:类的实例变量象结构的域一样存放在一块连续的存储区,但方法(成员函数)不存在该对象里。 10.1 数据空间的三种不同使用方法和管理方法 静态存储分配 栈式动态存储分配 堆式动态存储分配 10.1.1 静态存储分配 在编译时刻为每个数据项目确定出在运行时刻的存储空间中的位置,且这种绑定在运行时刻不再发生变化。限制: ???1.在编译时刻知道数据目标的大小和它们在内存位置上 约束; ???2.不能递归调用过程; ???3.不能动态地建立数据结构。 FORTRAN 77程序例子,给出局部变量的静态存储位置 (1)PROGRAM CNSUME ????(2)??CHARACTER *50 BUF ????(3)???INTEGER NEXT ????(4〕???CHARACTER C,PRDUCE ????(5)???DATA NEXT/1/,BUF/ / ????(6)??????C=PRDUCE()。 ????(7)??????BUF(NEXT:NEXT)=C ????(8〕??????NEXT=NEXT+1 ????(9)??????IF(C.NE. )GOTO 6 ???(10)??????WRITE(*,(A))BUF ???(11)?? ???END 10.3 栈式存储管理的实现 简单的栈式分配方案 嵌套过程的栈式分配方案 分程序结构的存储分配方案 过程的活动记录—AR 1. 简单的栈式分配方案 程序结构特点:过程定义不嵌套,过程可递归调用,含可变数组; 例: main 全局变量的说明 proc R …… end R; proc Q …… end Q; 主程序执行语句 end main 无嵌套过程的活动记录—AR 2. 嵌套过程语言的栈式分配方案 主要特点: (语言)一个过程可以引用包围它的任一外层过程所定义的标识符(如变量,数组或过程等)。 (实现)一个过程可以引用它的任一外层过程的最新活动记录中的某些数据。 关键技术:解决对非局部量的引用(存取)。 设法跟踪每个外层过程的最新活动记录AR的位置。 跟踪办法: 1. 用存取链(如PL/0的静态链SL)。 2. 用DISPLAY表。 目标代码解释执行时数据栈的布局(运行栈的存储分配) 每个过程的AR有 3个联系单元: SL: 静态链,指向定义该过程的直接外过程

文档评论(0)

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

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

1亿VIP精品文档

相关文档