编译原理与技术 运行环境.ppt
《编译原理与技术 运行环境.ppt》由会员分享,可在线阅读,更多相关《编译原理与技术 运行环境.ppt(52页珍藏版)》请在三一办公上搜索。
1、2023/4/26,编译原理与技术运行环境,1,编译原理与技术,运行环境,2023/4/26,编译原理与技术运行环境,2,运行环境,存储组织与分配 程序单元、运行时内存划分与活动记录 静态/动态存储分配 动态栈式的过程调用/返回 非局部名字的访问参数传递 参数传递的方式及其实现,2023/4/26,编译原理与技术运行环境,3,存储组织与分配,程序单元FORTRAN的子例程(subroutine)PASCAL的过程/函数(procedure/function)C的函数程序单元的激活(调用)与终止(返回)程序单元的执行需要:代码段活动记录(程序单元运行所需的额外信息,如参数,局部数据,返回地址等)
2、,2023/4/26,编译原理与技术运行环境,4,运行时内存划分,代码段,静态数据区,栈(stack),堆(heap),大小可以静态确定,全局/局部静态变量,活动记录栈,动态分配的数据,2023/4/26,编译原理与技术运行环境,5,活动记录,活动记录AR(Activation Record)是一连续存储区域,用于管理与存放和程序单元执行相关的重要信息。AR中的内容 临时区域。用以保存临时计算结果 局部数据区。源程序中程序单元声明的局部变量对应在此区域。机器状态保存区。存有机器的寄存器,程序指令计数器 ip(返回地址)等。,2023/4/26,编译原理与技术运行环境,6,活动记录,AR中的内容
3、 访问链(静态链)。当前程序单元可以访问的(静态程序中)外围程序单元的活动记录链。控制链(动态链)。程序单元的活动记录按它们的生成(或调用)次序串成链。实在参数 返回值,2023/4/26,编译原理与技术运行环境,7,活动记录的内容,返回值(return value)实在参数(actual parameter)控制链(control link)可选的访问链(optional access/static link)机器状态(saved machine status)局部数据(local data)临时区(temporaries),2023/4/26,编译原理与技术运行环境,8,活动记录内容的存取
4、,返回值 实在参数 控制链(old bp)可选的访问链 机器状态 局部数据 临时区,AR的基地址bp,2023/4/26,编译原理与技术运行环境,9,活动记录内容的存取,返回值 实在参数 控制链(old bp)可选的访问链 机器状态 局部数据 临时区,bp,偏移,d1,偏移d2,地址:bp+d1,地址:bp+d2,d1、d2谁正谁负?,2023/4/26,编译原理与技术运行环境,10,静态存储分配,全局变量的存储绑定、AR均在编译时确定且在整个程序执行中保持。不支持:1)动态数据结构2)过程递归调用 实现静态分配的语言:(早期)FORTRAN,2023/4/26,编译原理与技术运行环境,11,
5、CALL sub SUBROUTINE subCALL sub DATA I/10END WRITE(*.*)I I=100 END第一次调用sub,输出10第二次调用sub,输出100,e.g.1 FORTRAN静态存储分配,第一次调用前,第一次调用后,第二次调用后,2023/4/26,编译原理与技术运行环境,12,动态存储分配,栈式分配 AR在过程被调用(激活)时才在栈(stack)上分配;而在被调用过程(返回)终止时从栈上撤销。过程中(非静态)局部变量的存储绑定在过程执行时有效;过程终止时失效。支持过程递归调用。每次递归调用时,局部变量绑定到不同的存储。,2023/4/26,编译原理与技
6、术运行环境,13,动态存储分配,栈式分配下的AR内容布局,返回值 实在参数 可选的访问链 返回地址调用者 bp可选机器状态局部数据 临时区,bp,高地址,低地址,长度固定的区域放在AR中间,长度可变的区域放在AR低端,参数/返回值区域放在AR高端靠近调用者过程的活动记录,既便于双方存取,又适应参数可变情况,栈顶sp,2023/4/26,编译原理与技术运行环境,14,栈式分配下的过程调用与返回 过程调用:分配被调过程的AR并填入相关信息,然后程序控制转移到被调过程入口;过程A 调用 过程B 的过程调用序列:A的“调用”准备操作:1)3)1)A 计算实在参数并放入(对应栈操作push)B的活动记录
7、中;(亦可考虑返回值存放空间)2)A将可选的访问链放入(push)B的活动记录;3)A将返回地址放入B的活动记录并跳转到过程B的代码入口,开始B的执行;(一般通过A中的代码指令“call B”来完成这一步)4),2023/4/26,编译原理与技术运行环境,15,栈式分配下的过程调用与返回 过程A 调用 过程B 的过程调用序列:B的入口代码:4)6)4)在B自己的AR中保存A的活动记录的基址(即当前bp,对应操作 push bp)并且将这个位置作为B自己AR的基址(对应操作)mov sp,bp 即 bpsp)5)保存可选的机器状态(寄存器)6)为局部数据分配空间,(对应操作)sub local_
8、size,sp,即sp sp local_size7)“开始”B的执行。(至此,B的AR建好),2023/4/26,编译原理与技术运行环境,16,栈式分配下的过程调用与返回 过程返回:回收分配的被调过程的AR,并将程序控制转移回调用过程继续执行;过程A 调用 过程B 的过程返回序列:B的出口代码:1)2)1)B回收局部数据空间;恢复原先保存的机器状态2)B恢复A的AR基址;取出返回地址将程序控制交回到A。对应操作:mov bp,sp spbppop bp/恢复调用者A的bpret/B执行结束并返回注:X86-Linux中的leave 和ret组合亦能达到目的。至此,B的AR中除了参数/返回值区
9、域,其余区域全部回收(撤销)了。,2023/4/26,编译原理与技术运行环境,17,栈式分配下的过程调用与返回 过程A 调用 过程B 的过程返回序列:A的“调用”善后代码:3)4)3)A取回返回值以及引用型参数(有的话)4)A调整栈顶sp(主要根据参数个数以及可能有的访问链和可能有的返回值)。对应操作:add para_size,sp 即spsp+para_size至此,B的AR区域全部回收(撤销)了。,2023/4/26,编译原理与技术运行环境,18,e.g.2 栈式存储分配,有C程序如下:void g()int a;a=10;void h()int a;a=100;g();main()in
10、t a=1000;h();,2023/4/26,编译原理与技术运行环境,19,过程g被调用时,活动记录栈的(大致)内容,e.g.2 栈式存储分配,返回地址,old bp,a:1000,main程序的AR,返回地址,old bp,a:100,函数h的AR,返回地址,old bp,a:10,函数g的AR,bp,sp,2023/4/26,编译原理与技术运行环境,20,e.g.3 有参函数的活动记录,void func(int a,int b)int c,d;c=a;d=b;,bp,bp+8,bp+12,bp4,bp8,.file ar.c.text.globl func.type func,func
11、tionfunc:pushl%ebp movl%esp,%ebp subl$8,%esp movl 8(%ebp),%eax movl%eax,-4(%ebp)movl 12(%ebp),%eax movl%eax,-8(%ebp)leave ret,2023/4/26,编译原理与技术运行环境,21,有如下C程序:main()int i;float f;int j;scanf(“%d%f”,e.g.4.scanf的可变参数,2023/4/26,编译原理与技术运行环境,22,e.g.4.scanf的可变参数,&f,&i,格式串1指针,返回地址,老bp,&j,格式串2指针,返回地址,老bp,sca
12、nf的第一次调用时AR,scanf的第二次调用时AR,由于C语言采用逆序传递参数,格式串参数将被放在AR中的“固定”位置,即bp+8。而由此参数即可确定待输入值的参数(变量)的个数。从而适应参数个数变化的情况。,bp,bp+8,2023/4/26,编译原理与技术运行环境,23,e.g.5 悬空引用,有C程序如下:main()int*dangle()int*p=dangle();int i;return,2023/4/26,编译原理与技术运行环境,24,非局部变量访问,静态作用域规则 vs.动态作用域规则“最接近嵌套”vs.现行单元活动(调用次序)分程序 含有声明和语句;如C的 分程序具有以下特
13、征:-可以嵌套;-没有参数;-控制流沿静态文本进入、流出-采用“最接近嵌套”的规则,2023/4/26,编译原理与技术运行环境,25,非局部变量访问,e.g.6 分程序main()int a=0;int b=0;/local VAR of main int b=1;/block 1 int a=2;printf(“%d%dn”,a,b);/block 2 int b=3;printf(“%d%dn”,a,b);/block 3 printf(“%d%dn”,a,b);printf(“%d%dn”,a,b);,2023/4/26,编译原理与技术运行环境,26,分程序的实现,1)按无参过程方式来实
14、现控制流进入分程序时,在栈上分配局部变量空间,退出时撤销上述空间。e.g.6中各变量存储如下:,a0=0,b0=0,b1=1,a)进入block 1,未进入block 2,b)进入block 2,未进入block 3,a1=2,a0=0,b0=0,b1=1,c)退出block 2,进入block 3,b2=3,a0=0,b0=0,b1=1,d)退出block 3,进入block 1,a0=0,b0=0,b1=1,e)退出block 1,进入main,a0=0,b0=0,2023/4/26,编译原理与技术运行环境,27,分程序的实现,2)按过程为单位统一分配将分程序中的局部变量独立地看成过程的局
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理与技术 运行环境 编译 原理 技术 运行 环境

链接地址:https://www.31ppt.com/p-4526636.html