编译原理课件09-运行时存储空间组织.ppt
《编译原理课件09-运行时存储空间组织.ppt》由会员分享,可在线阅读,更多相关《编译原理课件09-运行时存储空间组织.ppt(53页珍藏版)》请在三一办公上搜索。
1、第九章 运行时存储空间组织,9.1 目标程序运行时的活动 以Pascal为例,假定程序由若干个过程组成 过程(procedure)定义一个过程的活动指的是该过程的一次执行 过程P一个活动的生存期,指的是从执行该过程体第一步操作到最后一步操作之间的操作序,包括执行P时调用其它过程花费的时间过程可以是递归的,(1)program sort(input,output)(2)var a:array0.10 of integer;(3)procedure readarray;(4)var i:integer;(5)begin(6)for i:=1 to 9 do read(ai)(7)end;(8)fu
2、nction partition(y,z:integer):integer;(9)var i:integer;(10)begin.(11)end;,(12)procedure quicksort(m,n:integer);(13)var i:integer;(14)begin(15)if(nm)then begin(16)i:=partition(m,n);(17)quicksort(m,i-1);(18)quicksort(i+1,n)(19)end;(20)end;(21)begin(22)a0:=-9999;a10:=9999;(23)readarray;(24)quicksort(1,
3、9)(25)end.,9.1.2 参数传递,过程是模块程序设计的主要手段,同时也是节省程序代码和扩充语言的主要途径。过程定义:procedure add(x,y:integer;var z:integer)begin z:=x+y;end;过程调用 add(a,b,c);,参数传递方式,一.传地址把实在参数的地址传递给相应的形式参数方法:调用段预先把实在参数的地址传递到被调用段可以拿到的地方;程序控制转入被调用段之后,被调用段首先把实在参数的地址抄进自己相应的形式单元中;过程体对形式参数的引用域赋值被处理成对形式单元的间接访问。PASCAL的变量参数方式,procedure swap(var
4、m:integer;var n:integer);var i:integer;begin i:=m;m:=n;n:=i;end,swap(a,b)把a,b的地址送到已知单元j1和j2中m:=j1;n:=j2;i:=m;m:=n;n:=i;,参数传递方式,二得结果传地址的一种变形方法:每个形参对应两个形式单元,第一个形式单元存放实参地址,第二个单元存放实参的值。在过程体中对形式参数的任何引用或赋值都看作对它的第二个单元的直接访问。过程完成返回前把第二个单元的内容存放到第一个单元所指的实参单元中。有些Fortran采用这种方式;,参数传递方式,三传值把实在参数的值传递给相应的形式参数方法:调用段预
5、先把实在参数的的值计算出来并放在被调用段可以拿到的地方;被调用段开始工作时,首先把实参的值抄入形式参数相应的单元;被调用段中,象引用局部数据一样引用形式单元。PASCAL的值参数,参数传递方式,四传名过程调用的作用相当于把被调用段的过程体抄到调用出现的地方,但把其中任一出现的形式参数都替换成相应的实参。方法:在进入被调用段的之前不对实在参数预先进行计值,而是让过程体中每当使用到相应的形式参数时才逐次对它实行计值(或计算地址)。因此,通常把实在参数处理成一个子程序(称为参数子程序),每当过程体中使用到相应的形式参数时就调用这个子程序。,PROGRAM EX var A:integer;PROCE
6、DURE P(B:integer)var A:integer;BEGIN A:=0;B:=B+1;A:=A+B;END;,BEGIN A:=2;TA:=0;A:=A+1;TA:=TA+A;write(A);END,BEGIN A:=2;P(A);write(A);END,例:procedure P(w,x,y,z);begin y:=y*w;z:=z+x;endbegin a:=5;b:=3;P(a+b,a-b,a,a);write(a);end,传值:5传地址:42得结果:7传名:77,编译程序为了组织存储空间,必须考虑下面几个问题:过程是否允许递归?当控制从一个过程的活动返回时,对局部名称
7、的值如何处理?过程是否允许引用非局部名称?过程调用时如何传递参数;过程是否可以做为参数被传递和做为结果被返回?存储空间可否在程序控制下进行动态分配?存储空间是否必须显式地释放?,9.2 运行时存储器的划分,一个目标程序运行所需的存储空间包括:存放目标代码的空间存放数据项目的空间存放程序运行的控制或连接数据所需单元(跟踪过程活动的控制栈),一个程序在运行时刻的内存划分:,代码(Code),静态数据(Static Data),栈(Stack),堆(Heap),9.2.2 活动记录,活动记录(连续存储块,用于管理过程):运行时,每当进入一个过程就有一个相应的活动记录累筑于栈顶。此记录含有连接数据、形
8、式单元、局部变量、局部数组的内情向量和临时工作单元等。活动记录采用栈式存储分配机制。,对任何局部变量X的引用可表示为变址访问:dxSP dx:变量X相对于活动记录起点的地址,在编译时可确定。,参数个数,返回地址,形式单元,临时单元,内情向量,局部变量,SP 0,1,2,老SP,TOP,每个过程的活动记录内容如图:,连接数据返回地址动态链:指向调用该过程前的最新活动记录地址的指针。静态链:指向静态直接外层最新活动记录地址的指针,用来访问非局部数据。,静态链,动态链,形式单元,临时单元,内情向量,局部变量,SP 0,1,2,返回地址,TOP,每个过程的活动记录内容,形式单元:存放相应的实在参数的地
9、址或值。局部数据区:局部变量、内情向量、临时工作单元(如存放对表达式求值的结果)。,静态链,动态链,形式单元,临时单元,内情向量,局部变量,SP 0,1,2,返回地址,TOP,每个过程的活动记录内容,静态分配策略(FORTRAN)如果在编译时能确定数据空间的大小,则可采用静态分配方法:在编译时刻为每个数据项目确定出在运行时刻的存储空间中的位置。动态分配策略(PASCAL)如果在编译时不能确定运行时数据空间的大小,则必须采用动态分配方法。允许递归过程和动态申请释放内存。栈式动态分配堆式动态分配,9.2.3 存储分配策略,9.3静态存储管理,FORTRAN程序的特点:整个程序所需数据空间的总量在编
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课件 09 运行 存储空间 组织
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6500200.html