编译原理,清华大学,第2版-第10章目标程序运行时的存储组织详解.ppt

编译原理,清华大学,第2版-第10章目标程序运行时的存储组织详解.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 目标程序运行时的组织 ;10.1 概述;存储管理复杂度取决于源语言本身,具体包括: 允许的数据类型的多少? 语言中允许的数据项是: 静态确定?动态确定? 程序决定名字的作用域的规则和结构 段结构? 过程定义不嵌套?只允许过程递归调用? 分程序结构: 分程序嵌套?过程定义嵌套? ; 目标代码区 静态数据区 Stack heap ;2、存储分配策略: (1)静态存储分配——在编译时能确定目标程序运行中所需的全部数据空间的大小,编译时安排好目标程序运行时的全部数据空间,确定每个数据对象的存储位置。;;(2)动态存储分配——在运行阶段动态地为源程序中的量分配存储空间。(栈式、堆式) 注:1)若某程序设计语言允许过程递归调用,而且允许使用可变数组,那么在编译时就不可能完全为其数据项目分配存储单元,必须采取动态存储分配策略。 ;;3、过程活动:一个过程的活动指的是该过程的一次执行。 4、活动记录(AR):一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区(块)叫做一个活动记录。此记录含有连接数据、形式单元、局部变量、局部数组的内情向量和临时工作单元等。 ;对任何局部变量X的引用可表示为变址访问: dx[SP] dx: 变量X相对于活动记录起点的地址,在编译时可确定。;连接数据 返回地址 动态链:指向调用该过程的最新活动记录地址的指针。 静态链:指向直接外层最新活动记录地址的指针,用来访问非局部数据。;形式单元:存放相应的实参的地址或值。 局部数据区:局部变量、内情向量、临时工作单元(如存放对表达式求值的结果)。;临时单元 ; 1、 call P 被翻译成: 1[TOP]:=SP (保护现行SP) JSR P (转子指令);2、转进过程P后,首先应执行下述指令: SP:=TOP+1 (定义新的SP) 1[SP]:=返回地址 (保护返回地址) TOP:=TOP+L (新TOP) L:过程P的活动记录所需单元数, 在编译时可确定。 ;3、 过程返回时,应执行下列指令: X:=2[TOP] (把返回地址取到X中) TOP:=SP-1 (恢复调用前TOP) SP:=0[SP] (恢复调用前SP) UJ X (按X返回) ; 10.2 栈式存储??配的实现; 例: Main( ) { Main中的数据说明 } proc R( ) { R中的数据说明 } … proc Q( ) { Q中的数据说明 }; R的数组区 R的活动记录 Q的活动记录 主程序全局 数据区;二、嵌套过程语言的栈式分配的实现 1、程序结构特点:语言的定义允许嵌套,一个过程可以引用包围它的任一外层过程所定义的标识符(如变量,数组或过程等)(如PASCAL语言) 。 如何才能引用外层数据?;;PASCAL PASCAL程序本身可以看成是一个操作系统所调用的过程,过程可以嵌套和递归。 一个PASCAL过程: 过程头; 说明段(由一系列的说明语句组成); begin 执行体(由一系列的执行语句组成); end;作用域:一个名字能被使用的区域范围称作这个名字的作用域。 允许同一个标识符在不同的过程中代表不同的名字。 名字作用域规则--最近嵌套原则 一个在子程序B1中说明的名字X只在B1中有效(局部于B1); 如果B2是B1的一个内层子程序且B2中对标识符X没有新的说明,则原来的名字X在B2中仍然有效。如果B2对X重新作了说明,那么,B2对X的任何引用都是指重新说明过的这个X。;program main var A, B : real; … procedure P1 var B:boolean; … begin … end procedure P2 var A:integer; … begin … end begin … end; 非局部名字的访问的实现 ;(1) 用静态链;;main p1 p2 p3 p4 ;2、用Display表;说明:1、由于过程的层数可以静态确定,因此每个过程的Display表的体积在编译时即可以确定。 2、某过程p是在层次为i的过程q内定义的,并且q是包围p的直接外层,那么p的过程层数为i+1。 ;pro

您可能关注的文档

文档评论(0)

过各自的生活 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档