版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 活动记录的详细结构 活动记录活动记录动态链地址返回地址返回值临时变量 形 参局部变量 过程层次空间大小 寄存器状态变量访问环境 spoffsetInitOff第1页/共17页AR中每一项的详细解释 sp:指向当前AR空间的首地址;(寄存器) 动态链地址:动态链地址对应的就是当前函数的调用函数的AR首地址; 返回地址: 保存本函数执行结束后应返回的代码地址; 即当前函数调用的下一条代码的地址; 活动记录长度:当前活动记录的空间大小; 过程层次:本函数的层数;第2页/共17页AR中每一项的详细解释 寄存器状态:保存在函数调用之前的所有寄存器的值; 返回值:保存函数的返回值; 访问环境: 保存相关
2、信息,方便确定变量的存储地址; 对于C语言来讲,可以不用(因为层数最大为1); 形参变量区:存放参数的值的空间; 局部变量区:存放局部变量的值的空间; 临时变量区:存放临时变量的值的空间;第3页/共17页AR的例子 #define n 2 int sum = 0; int fac(int i) if (i=0) return 1; if (i0) return -1; return (i*fac(i-1); void main () sum = fac(n); 第4页/共17页活动记录的管理 Who? 目标代码完成AR的管理; When? 函数调用时: f(e1, , en) 函数返回时:re
3、turn How? 调用时申请活动记录空间并填写相关内容 返回时-释放活动记录的空间等第5页/共17页活动记录的填写 对应实际函数调用 四元式包括 (VALACT, result, offset, size) (CALL, f, true, t) 需要做的事情 将实参放到对应的形参单元中; 将t(返回值应存放的变量)的地址存放在返回值单元; 把sp的值放到动态链地址单元; 填写层数; (可能不一定需要) 保存返回地址(当前目标代码地址); 保存变量访问环境;(可能不一定需要) 保存AR长度size; (可能不一定需要) 改变sp的值; 转向f 的入口地址;动态链地址 返回地址 返回值 临时变
4、量形 参局部变 量过程层次 空间大小 寄存器 状态变量访问 环境spCurrentAR第6页/共17页活动记录的填写 对应形参函数调用 四元式包括 (VALACT, result, offset, size) (CALL, f, false, t) 需要做的事情 确定f作为形参的(level和offset); 在当前的AR的形参区中可以找到对应的地址, 其中存放的是对应实际函数的(层次,空间大小,入口地址); 根据上述信息, 做实际函数调用的事情;动态 链地址返回 地址返回值 临时变量 形 参局部变量 过程 层次空间 大小寄存 器状态变量访 问环境spCurrentAR第7页/共17页活动记录
5、的释放 对应函数返回 四元式包括 (ENDFUNC, _, _, _) 需要做的事情 恢复寄存器; 改变sp的值, sp = 动态链地址空间存的值; 转向返回地址对应的代码执行;动态链地址返回地址返回值临时变量形参局部变量过程层次空间大小寄存器状态变量访问环境spPreAR第8页/共17页关于返回值的处理 对应返回值 四元式包括 (RETURN, _, _, t) (RETURN, _, _, _) AR中返回值单元的内容存放的是一个地址; 需要做的事情 把返回值赋值给返回值单元对应地址的空间动态链地址返回地址返回值临时变量形参局部变量过程层次空间大小寄存器状态变量访问环境spPreAR返回值
6、第9页/共17页9.3 变量访问环境 What? 目标程序运行时,如何保存相关信息,从而保证找到变量的当前值 实现抽象地址到具体地址的计算 完全静态运行环境 一到一的映射,可静态确定 完全动态运行环境 动态确定,随时分配 栈式运行环境 (L, offset, mode) (spL + InitOff + offset)第10页/共17页C语言的变量访问环境的实现 变量的抽象地址到目标地址 (0, off, mode)表示该变量是全局变量, 并且保存在距离全局变量区首地址off个位置的单元中, 即其具体地址应为: gp +off, 其中gp表示的是全局变量区首地址 (1, off, mode)表
7、示该变量是定义在某一个函数中的局部变量,并且保存在该函数当前AR的距离局部变量区首地址off位置的单元中,即其具体地址为: sp + InitOff + off, 其中sp对应的是该函数当前AR的首地址, InitOff对应的是局部变量区之前的区距; (-1, off, mode)表示的是临时变量,保存在该函数当前AR的距离局部变量区首地址off位置的单元中,即其具体地址为: sp + InitOff + off 第11页/共17页C语言变量访问环境的实现 C语言变量访问环境的实现(1)记录全局变量区首地址到gp;(2)每次函数调用时, 把gp的值保存到变量访问环境单元中; (不是必须) 活动
8、记录活动记录动态链地 址返回地 址返回 值临时变 量形 参局部变 量过程层 次空间大 小寄存器状 态变量访问环境 gpInitOff第12页/共17页例子 #define n 2 int sum = 0; int fac(int i) if (i=0) return 1; if (i0) return -1; return (i*fac(i-1); void main () sum = fac(n); 内存内存Code area (代码区) sum : 0mainARsum: (0, 0)i: (1, 0)gpgp临时变 量facARgp i: 2 临时变 量facARgp i: 1 临时变量
9、 sppc第13页/共17页Pascal语言变量访问环境的实现 Pascal语言是嵌套式语言,即函数声明中仍可嵌套声明其它函数的语言。 嵌套语言的这种特性,增加了运行时存储空间管理的复杂度。第14页/共17页program M;var x,y,z:integer;procedure P();var x,y:integer; procedure Q(); var x,z:real; begin x=y+z;end; procedure R(); var y,z:real; begin x=y+z;Q();end; begin x=y+z;R();end;begin P();end.第15页/共17
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年内蒙古民族幼儿师范高等专科学校单招综合素质考试题库含答案详解(轻巧夺冠)
- 2026年兰州资源环境职业技术大学单招职业倾向性考试题库附答案详解(巩固)
- 2026年兴安职业技术学院单招综合素质考试题库含答案详解(巩固)
- 2026年内蒙古民族幼儿师范高等专科学校单招职业倾向性考试题库附答案详解(夺分金卷)
- 2026年共青科技职业学院单招职业倾向性测试题库及答案详解(典优)
- 2026年北京科技大学天津学院单招职业适应性测试题库及答案详解(夺冠系列)
- 2026年包头铁道职业技术学院单招职业适应性测试题库含答案详解(模拟题)
- 2026年南阳农业职业学院单招职业倾向性测试题库及答案详解参考
- 2026年内蒙古电子信息职业技术学院单招综合素质考试题库附答案详解(考试直接用)
- 2026年包头职业技术学院单招职业倾向性考试题库附答案详解(a卷)
- 初中地理七年级《世界气候》单元复习课教学设计
- 厨师基础知识培训课件
- 2026中国科学院机关招聘应届毕业生5人笔试备考试题及答案解析
- 森林防火物资储备库建设标准
- 2026年陕西单招基础薄弱生专用模拟卷含答案基础题占比80%
- 贡菜收购合同范本
- 27-华为的经营管理之道:以客户需求为导向的流程化组织建设与持续创新实践
- 2025年贵州省高考地理试卷真题(含答案详解)
- 毛泽东《人的正确思想是从哪里来的?》逐句解析与层次分析
- 重庆科技大学《高等数学I》2025 - 2026学年第一学期期末试卷
- 2025年中远海运招聘1189人(含社招)笔试参考题库附带答案详解
评论
0/150
提交评论