运行时存储空间结构_第1页
运行时存储空间结构_第2页
运行时存储空间结构_第3页
运行时存储空间结构_第4页
运行时存储空间结构_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

9.2过程活动记录(ActivationRecord)和栈,过程活动记录(AR):每当过程/函数被调用时,为其分配的局部空间的一种统一结构。存放在栈区的一段连续的存储单元中,由目标程序进行管理。是过程一次活动的一个现场记录。,控制信息,返回地址,返回值,临时变量,形参,局部变量,活动记录,栈区的组织,AR链或动态链程序运行时,每调用一个函数,就要为其分配一段连续空间,用于存放该函数运行时的各种信息(过程活动记录AR),函数运行结束返回时,其活动记录就要释放掉;在当前AR中保存前一个AR首地址,这样形成了一个链表;CurrentAR:当前栈顶的AR;CurrentFunction:当前AR对应的函数;,AR0,nil,AR1,AR2,活动记录的详细结构,活动记录,动态链地址,返回地址,返回值,临时变量,形参,局部变量,过程层次,空间大小,寄存器状态,变量访问环境,sp,offset,InitOff,AR中每一项的详细解释,sp:指向当前AR空间的首地址;(寄存器)动态链地址:动态链地址对应的就是当前函数的调用函数的AR首地址;返回地址:保存本函数执行结束后应返回的代码地址;即当前函数调用的下一条代码的地址;活动记录长度:当前活动记录的空间大小;过程层次:本函数的层数;,AR中每一项的详细解释,寄存器状态:保存在函数调用之前的所有寄存器的值;返回值:保存函数的返回值;访问环境:保存相关信息,方便确定变量的存储地址;对于C语言来讲,可以不用(因为层数最大为1);形参变量区:存放参数的值的空间;局部变量区:存放局部变量的值的空间;临时变量区:存放临时变量的值的空间;,AR的例子,#definen2intsum=0;intfac(inti)if(i=0)return1;if(i0)return-1;return(i*fac(i-1);voidmain()sum=fac(n);,活动记录的管理,Who?目标代码完成AR的管理;When?函数调用时:f(e1,en)函数返回时:returnHow?调用时申请活动记录空间并填写相关内容返回时-释放活动记录的空间等,活动记录的填写,对应实际函数调用四元式包括(VALACT,result,offset,size)(CALL,f,true,t)需要做的事情将实参放到对应的形参单元中;将t(返回值应存放的变量)的地址存放在返回值单元;把sp的值放到动态链地址单元;填写层数;(可能不一定需要)保存返回地址(当前目标代码地址);保存变量访问环境;(可能不一定需要)保存AR长度size;(可能不一定需要)改变sp的值;转向f的入口地址;,动态链地址,返回地址,返回值,临时变量,形参,局部变量,过程层次,空间大小,寄存器状态,变量访问环境,sp,CurrentAR,活动记录的填写,对应形参函数调用四元式包括(VALACT,result,offset,size)(CALL,f,false,t)需要做的事情确定f作为形参的(level和offset);在当前的AR的形参区中可以找到对应的地址,其中存放的是对应实际函数的(层次,空间大小,入口地址);根据上述信息,做实际函数调用的事情;,动态链地址,返回地址,返回值,临时变量,形参,局部变量,过程层次,空间大小,寄存器状态,变量访问环境,sp,CurrentAR,活动记录的释放,对应函数返回四元式包括(ENDFUNC,_,_,_)需要做的事情恢复寄存器;改变sp的值,sp=动态链地址空间存的值;转向返回地址对应的代码执行;,动态链地址,返回地址,返回值,临时变量,形参,局部变量,过程层次,空间大小,寄存器状态,变量访问环境,sp,PreAR,关于返回值的处理,对应返回值四元式包括(RETURN,_,_,t)(RETURN,_,_,_)AR中返回值单元的内容存放的是一个地址;需要做的事情把返回值赋值给返回值单元对应地址的空间,动态链地址,返回地址,返回值,临时变量,形参,局部变量,过程层次,空间大小,寄存器状态,变量访问环境,sp,PreAR,返回值,9.3变量访问环境,What?目标程序运行时,如何保存相关信息,从而保证找到变量的当前值实现抽象地址到具体地址的计算完全静态运行环境一到一的映射,可静态确定完全动态运行环境动态确定,随时分配栈式运行环境(L,offset,mode)(spL+InitOff+offset),C语言的变量访问环境的实现,变量的抽象地址到目标地址(0,off,mode)表示该变量是全局变量,并且保存在距离全局变量区首地址off个位置的单元中,即其具体地址应为:gp+off,其中gp表示的是全局变量区首地址(1,off,mode)表示该变量是定义在某一个函数中的局部变量,并且保存在该函数当前AR的距离局部变量区首地址off位置的单元中,即其具体地址为:sp+InitOff+off,其中sp对应的是该函数当前AR的首地址,InitOff对应的是局部变量区之前的区距;(-1,off,mode)表示的是临时变量,保存在该函数当前AR的距离局部变量区首地址off位置的单元中,即其具体地址为:sp+InitOff+off,C语言变量访问环境的实现,C语言变量访问环境的实现(1)记录全局变量区首地址到gp;(2)每次函数调用时,把gp的值保存到变量访问环境单元中;(不是必须),活动记录,动态链地址,返回地址,返回值,临时变量,形参,局部变量,过程层次,空间大小,寄存器状态,变量访问环境,gp,InitOff,例子,#definen2intsum=0;intfac(inti)if(i=0)return1;if(i0)return-1;return(i*fac(i-1);voidmain()sum=fac(n);,内存,Codearea(代码区),sum:0,mainAR,sum:(0,0),i:(1,0),gp,gp,临时变量,facAR,gp,i:2,临时变量,facAR,gp,i:1,临时变量,sp,pc,Pascal语言变量访问环境的实现,Pascal语言是嵌套式语言,即函数声明中仍可嵌套声明其它函数的语言。嵌套语言的这种特性,增加了运行时存储空间管理的复杂度。,programM;varx,y,z:integer;procedureP();varx,y:integer;procedureQ();varx,z:real;beginx=y+z;end;procedureR();vary,z:real;beginx=y+z;Q

温馨提示

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

评论

0/150

提交评论