编译原理ppt62_第1页
编译原理ppt62_第2页
编译原理ppt62_第3页
编译原理ppt62_第4页
编译原理ppt62_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编译器从操作系统获得存储区,用于保存:产生的目标代码数据对象记录过程活动的控制栈的对应物栈式分配策略:按栈方式管理运行时的存储空间1代码静态数据栈堆内存区域的典型划分空闲空间26.2.2 活动树和运行栈如果a和b是过程的活动,那么它们的生存期或者不交迭,或者嵌套。也就是说,如果在离开a之前进入b,那么控制在离开b之后才能离开a3用活动树来描绘控制进入和离开活动的方式。在活动树中:每个节点代表过程的一个活动根节点代表主程序的活动当且仅当控制流从活动a进入活动b时,节点a是节点b的父节点当且仅当a的生存期先于b的生存期发生时,a节点处于b节点的左边4program sort(input, outp

2、ut); var a: array 0.10 of integer; procedure readarray; var i: integer; begin for i :=1 to 9 do read(ai) end; function partition(y,z:integer) :integer; var i,j,x,v:integer; begin . end; procedure quicksort(m,n:integer); var i: integer; begin if (nm) then begin i:=partition(m,n); quicksort(m,i-1); qu

3、icksort(i+1,n) end end; begin a0:=-9999; a10:=9999; readarray; quicksort(1,9) end. 5mq(1,9)rp(1,9)q(1,3)q(1,0)p(1,3)q(2,3)q(2,1)q(3,3)p(2,3)q(5,9)q(5,5)p(5,9)q(7,9)q(7,7)q(9,9)p(7,9)6控制栈程序的控制流对应于从活动树根节点开始的深度优先遍历用控制栈保存活跃的过程活动。基本思想是:当活动开始时,把这个活动的节点压入控制栈;当这个活动结束时,弹出这个节点控制栈的内容与到活动树的根节点的一条路径相关。当节点n在控制栈的栈

4、顶时,栈内包含的是从节点n到根的路径上的节点7mq(1,9)rp(1,9)q(1,3)q(1,0)p(1,3)q(2,3)虚线表示连接的节点的活动已经执行完毕实线表示连接的节点的活动没有执行完毕,需要在控制栈中保存此活动的信息8mq(1,9)rp(1,9)q(1,3)q(1,0)p(1,3)q(2,3)ma : arrays的活动记录ri:integerr的活动记录q(1,9)i:integerq的活动记录q(1,3)i:integerq的活动记录p(1,9)i,j,x,v:integerp的活动记录96.2.3 调用序列过程调用是通过在目标代码中生成调用序列来实现的调用序列分配活动记录,并把

5、信息填入它的域中;返回序列恢复机器状态,使调用过程能够继续执行10在过程调用时执行的分配活动记录,以及把信息填入其域中的代码被称为过程调用序列在过程返回时执行的恢复机器状态,回收活动记录,以及让调用过程继续执行的代码被称为过程返回序列注:过程调用序列、过程返回序列和活动记录的布局会因实现而异;过程调用序列和过程返回序列的代码常分为两个部分,分处于调用过程和被调用过程11设计原则调用者和被调用者之间交流的数据一般放在被调用者活动记录的开始处,并尽可能靠近调用者的活动记录固定长度的项通常放在活动记录的中间,一般包括控制链、访问链和机器状态域在编译时不能及时知道大小的一些项放在活动记录的末端12寄存

6、器top_sp指向活动记录中机器状态域的末端寄存器base_sp指向栈顶活动记录中控制链所在的位置,它作为访问栈顶活动记录中内容的基地址调用序列调用者计算实参调用者把返回地址和top_sp的旧值存入被调用者的活动记录中。然后调用者调整top_sp值被调用者保存寄存器值和其他机器状态信息被调用者初始化其局部数据,并开始执行13参数和返回值控制链链和保存的状态参数和返回值临时变量和局部变量控制链链和保存的状态临时变量和局部变量top_sp调用者的任务被调用者的任务调用者的活动记录被调用者的活动记录14可能的返回序列被调用者将返回值放入邻近调用者的活动记录的地方利用状态域的信息,被调用者恢复top_sp和其他寄存器,并且按调用者代码中的返回地址返回尽管top_sp的值减少了,但调用者可以将返回值复制到自己的活动记录中,并用它来计算一个表达式156.2.4 栈上可变长数据处理变长数据的常用策略:在活动记录中并不存储这些数据,只保存指向这些数据起始位置的指针16控制链指向A的指针指向B的指针指向C的指针控制链base_sptop_spp的活动记录p的数组q的数组被p调用的过程q的活动记

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论