




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第九章 运行时存储空 间组织内容线索n目标程序运行时的活动目标程序运行时的活动n运行时存储器的划分运行时存储器的划分 n静态存储分配静态存储分配n简单的栈式存储分配简单的栈式存储分配n嵌套过程语言的栈式实现嵌套过程语言的栈式实现过程的活动n过程定义:过程名过程体过程定义:过程名过程体n过程调用:过程名出现在可执行语句中。过程调用:过程名出现在可执行语句中。n过程的活动:过程的一次执行。过程的活动:过程的一次执行。n活动的生存期:执行过程体第一步操作到活动的生存期:执行过程体第一步操作到最后一步操作之间的操作序列,包括该过最后一步操作之间的操作序列,包括该过程调用其它过程花费的时间。程调用其它过
2、程花费的时间。(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) function partition(y, z:integer):integer;(9) var i:integer;(10) begin .(11) end;program sort procedure readarray function partition(y pro
3、cedure quicksort(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, 9 )(25) gram sort procedure
4、 readarray function partition(y procedure quicksort过程的活动n每次控制从过程每次控制从过程P进入过程进入过程Q后,如果没有错误,最后都后,如果没有错误,最后都返回到过程返回到过程P。对于非递归的两个过程,如果对于非递归的两个过程,如果a和和b都是过程的活动,那么它们的都是过程的活动,那么它们的生存期或者是生存期或者是不重叠不重叠的,或者是的,或者是嵌套嵌套的。的。n如果一个过程是递归的,那么在某一时刻可能有这个过程如果一个过程是递归的,那么在某一时刻可能有这个过程的几个活动活跃着。的几个活动活跃着。n编译程序组织存储空间时,要考虑激活一个过程
5、的新活动编译程序组织存储空间时,要考虑激活一个过程的新活动时或从过程的活动返回时,对局部名的处理,及是否允许时或从过程的活动返回时,对局部名的处理,及是否允许静态或动态存储分配等。静态或动态存储分配等。过程调用n过程(函数)是结构化程序设计的主要手段,同时也是节过程(函数)是结构化程序设计的主要手段,同时也是节省程序代码和扩充语言能力的主要途径。省程序代码和扩充语言能力的主要途径。n过程定义:过程定义: procedure add(x,y:integer; var z:integer) begin z:=x+y; end;n过程调用过程调用 add(a,b,c); 参数传递n调用和被调用过程之
6、间的信息是通过调用和被调用过程之间的信息是通过参数参数(或全局量)来传递的。称之为(或全局量)来传递的。称之为形式参数形式参数与与实在参数实在参数。传地址传地址得结果得结果传值传值传名传名传地址n把把实在参数的地址实在参数的地址传递给相应的传递给相应的形式参数形式参数,形式,形式参数在过程段有相应的形式单元存放相应的实在参数在过程段有相应的形式单元存放相应的实在参数的地址。参数的地址。n方法:方法:调用段预先把实在参数的地址传递到被调用段可以拿调用段预先把实在参数的地址传递到被调用段可以拿到的地方到的地方;程序控制转入被调用段之后,被调用段首先把实在参程序控制转入被调用段之后,被调用段首先把实
7、在参数的地址抄进自己相应的形式单元中数的地址抄进自己相应的形式单元中;过程体对形式参数的引用过程体对形式参数的引用或赋值被处理成或赋值被处理成对形式单元对形式单元的间接访问。的间接访问。例例. 对如下程序对如下程序 procedure P(x,y,z) begin y:=y+1; z:=z+x; end program M(input, output) begin A:=2;B:=3; P(A+B,A,A); print A;end传地址方式下的程序输出传地址方式下的程序输出结果。结果。5TA实参单元实参单元形参单元形参单元xzy3B 2 3 8结果输出结果输出A=8procedure swa
8、p (var m:integer; var n: integer); var i:integer; begin i:=m; m:=n; n:=i; endnswap(a,b)把把a,b的地址送到已知单元的地址送到已知单元j1和和j2中中m:=j1;n:=j2;i:=m;m:= n;n:=i;得结果n传地址的一种变形传地址的一种变形,但不等价但不等价n方法:方法:每个形参对应每个形参对应两个形式单元两个形式单元,第一个形式单元存放实,第一个形式单元存放实参地址,第二个单元存放实参的值。参地址,第二个单元存放实参的值。在过程体中对形式参数的任何引用或赋值都看作对它在过程体中对形式参数的任何引用或赋
9、值都看作对它的第二个单元的直接访问。的第二个单元的直接访问。过程完成返回前把第二个单元的内容存放到第一个单过程完成返回前把第二个单元的内容存放到第一个单元所指的实参单元中。元所指的实参单元中。例:对如下程序例:对如下程序 procedure P(x,y,z) begin y:=y+1; z:=z+x; end program M(input, output) begin A:=2;B:=3; P(A+B,A,A); print A;end得结果方式下的程序输出结果。得结果方式下的程序输出结果。实参单元实参单元形参单元形参单元53TABxyz 5 2 2 3 7 2 7结果输出结果输出A=7传值
10、n把实在参数的把实在参数的值值传递给相应的形式参数传递给相应的形式参数n方法:方法:调用段预先把实在参数的的值计算出来并放在被调用调用段预先把实在参数的的值计算出来并放在被调用段可以拿到的地方段可以拿到的地方;被调用段开始工作时,首先把实参的值抄入形式参数被调用段开始工作时,首先把实参的值抄入形式参数相应的单元相应的单元;被调用段中,象引用局部数据一样引用形式单元。被调用段中,象引用局部数据一样引用形式单元。例例. 对如下程序对如下程序 procedure P(x,y,z) begin y:=y+1; z:=z+x; end program M(input, output) begin A:=
11、2;B:=3; P(A+B,A,A); print A;end传值方式下的程序输出结果。传值方式下的程序输出结果。实参单元实参单元523AB形参单元形参单元Txyz 5 2 2 3 7结果输出结果输出A=2传名n过程调用的作用相当于把被调用段的过程体抄到调用出现过程调用的作用相当于把被调用段的过程体抄到调用出现的地方,但把其中任一出现的形式参数都替换成相应的实的地方,但把其中任一出现的形式参数都替换成相应的实参。参。n方法:方法: 在进入被调用段的之前不对实在参数预先进行计值,而是让过程在进入被调用段的之前不对实在参数预先进行计值,而是让过程体中每当使用到相应的形式参数时才逐次对它实行计值(或
12、计算体中每当使用到相应的形式参数时才逐次对它实行计值(或计算地址)。因此,通常把实在参数处理成一个子程序(称为参数子地址)。因此,通常把实在参数处理成一个子程序(称为参数子程序),每当过程体中使用到相应的形式参数时就调用这个子程程序),每当过程体中使用到相应的形式参数时就调用这个子程序。序。例:对如下程序例:对如下程序 procedure P(x,y,z) begin y:=y+1; z:=z+x; end program M(input, output) begin A:=2;B:=3; P(A+B,A,A); print A;end传名方式下的程序输出结果。传名方式下的程序输出结果。主程序
13、替换为:主程序替换为: beginA:=2;B=3;A:=A+1;A:=A+A+B;print A; end结果输出结果输出A=9PROGRAM EX var A:integer;PROCEDURE 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);ENDBEGIN A:=2; P(A); write(A);END例例. .procedure P(w,x,y,z);begin y := y*w; z := z+x;endbegin
14、a := 5; b := 3; P(a+b,a-b,a,a); write(a);end传值传值:传地址传地址:得结果得结果:传名传名:542777小结n编译程序为了组织存储空间,必须考虑下面几个编译程序为了组织存储空间,必须考虑下面几个问题:问题:过程是否允许递归?过程是否允许递归?当控制从一个过程的活动返回时,对局部名称的值如当控制从一个过程的活动返回时,对局部名称的值如何处理?何处理?过程是否允许引用非局部名称?过程是否允许引用非局部名称?过程调用时如何传递参数;过程是否可以做为参数被过程调用时如何传递参数;过程是否可以做为参数被传递和做为结果被返回?传递和做为结果被返回?存储空间可否在
15、程序控制下进行动态分配?存储空间可否在程序控制下进行动态分配?存储空间是否必须显式地释放?存储空间是否必须显式地释放?内容线索目标程序运行时的活动目标程序运行时的活动n运行时存储器的划分运行时存储器的划分 n静态存储分配静态存储分配n简单的栈式存储分配简单的栈式存储分配n嵌套过程语言的栈式实现嵌套过程语言的栈式实现存储空间需求n一个目标程序运行所需的存储空间包括一个目标程序运行所需的存储空间包括:存放目标代码的空间存放目标代码的空间存放数据项目的空间存放数据项目的空间存放程序运行的控制或连接数据所需单元(控存放程序运行的控制或连接数据所需单元(控制栈)制栈)n一个程序在运行时刻的内存划分一个程
16、序在运行时刻的内存划分:代码代码(Code)静态数据静态数据(Static Data)栈栈(Stack) 堆堆(Heap) 存放动态数据存放动态数据过程活过程活动数据动数据活动记录n活动记录:为了管理一个过程活动所需的活动记录:为了管理一个过程活动所需的信息,使用一个连续的存储块存放这些信信息,使用一个连续的存储块存放这些信息,这个连续存储块称为息,这个连续存储块称为活动记录活动记录。n运行时,每当进入一个过程就有一个相应运行时,每当进入一个过程就有一个相应的活动记录累筑于栈顶。此记录含有连接的活动记录累筑于栈顶。此记录含有连接数据、形式单元、局部变量、局部数组的数据、形式单元、局部变量、局部
17、数组的内情向量和临时工作单元等。内情向量和临时工作单元等。n连接数据连接数据返回地址返回地址动态链:指向调用该动态链:指向调用该过程前的最新活动记过程前的最新活动记录地址的指针。录地址的指针。静态链:指向静态直静态链:指向静态直接外层最新活动记录接外层最新活动记录地址的指针,用来访地址的指针,用来访问非局部数据。问非局部数据。静态链静态链动态链动态链形式单元形式单元临时单元临时单元内情向量内情向量局部变量局部变量SP 012返回地址返回地址TOP 活动记录内容活动记录内容n形式单元:存放相应的形式单元:存放相应的实在参数的地址或值。实在参数的地址或值。n局部数据区:局部变量、局部数据区:局部变
18、量、内情向量、临时工作单内情向量、临时工作单元(如存放对表达式求元(如存放对表达式求值的结果)。值的结果)。静态链静态链动态链动态链形式单元形式单元临时单元临时单元内情向量内情向量局部变量局部变量SP 012返回地址返回地址TOP 活动记录内容活动记录内容对任何局部变量对任何局部变量X的引用的引用可表示为变址访问可表示为变址访问: dxSP dx: 变量变量X相对于活动记相对于活动记录起点的地址,在编译录起点的地址,在编译时可确定。时可确定。静态链静态链动态链动态链形式单元形式单元临时单元临时单元内情向量内情向量局部变量局部变量SP 012返回地址返回地址TOP 活动记录内容活动记录内容存储分
19、配策略存储分配策略n静态分配策略静态分配策略(FORTRAN): 如果在编译时能确定数据空如果在编译时能确定数据空间的大小,则可采用静态分配方法。间的大小,则可采用静态分配方法。在编译时刻为每个数在编译时刻为每个数据对象分配固定的存储单元,且在运行时始终保持不变据对象分配固定的存储单元,且在运行时始终保持不变。n动态分配策略动态分配策略(PASCAL) :如果在编译时不能确定运行时:如果在编译时不能确定运行时数据空间的大小,则必须采用动态分配方法。数据空间的大小,则必须采用动态分配方法。允许递归过允许递归过程和动态申请释放内存程和动态申请释放内存。栈式动态分配栈式动态分配堆式动态分配堆式动态分
20、配内容线索目标程序运行时的活动目标程序运行时的活动运行时存储器的划分运行时存储器的划分 n静态存储分配静态存储分配n简单的栈式存储分配简单的栈式存储分配n嵌套过程语言的栈式实现嵌套过程语言的栈式实现FORTRAN的存储分配nFORTRAN语言特点语言特点 不允许递归过程;不允许递归过程; 不允许可变数组;不允许可变数组; 每个数据所需空间是常数;每个数据所需空间是常数; 数据名性质确定;数据名性质确定;n整个程序所需空间在编译时可确定整个程序所需空间在编译时可确定, 可采用静态分配策略可采用静态分配策略n 难点难点: COMMAN 语句的处理语句的处理 EQUIVALENCE 语句的处理语句的
21、处理存储结构n数据区数据区 局部区局部区: 每个程序段一个每个程序段一个, (编号(编号128) 存放公用块中变量的值。存放公用块中变量的值。n存储映象存储映象:描述数据区中名字与描述数据区中名字与地址的对应关系。地址的对应关系。在符号表中,对每个数据名登记其在符号表中,对每个数据名登记其所属数据区编号及在该区中的相对所属数据区编号及在该区中的相对位置。位置。 目标程序区目标程序区表表 区区局部区局部区1局部区局部区2. . .公用区公用区1公用区公用区2数数据据区区. . .局部数据区的内容及存放次序局部数据区的内容及存放次序寄存器保护区寄存器保护区返回地址返回地址形式单元形式单元临时变量临
22、时变量数组数组简单变量简单变量01A保存调用此程序段保存调用此程序段时的返回地址时的返回地址保存调用段留在寄保存调用段留在寄存器中的有关信息存器中的有关信息形式单元是和形式形式单元是和形式参数(哑元)相对参数(哑元)相对应的,旨在存放实应的,旨在存放实在参数的地址或值在参数的地址或值n考虑子程序段:考虑子程序段:SUBROUTINE SWAP(A,B)T=AA=BB=TRETURNEND地址地址名字名字NAMENAME性质性质ATTRIBUTEATTRIBUTEDADAADDRADDRSWAPSWAP子程序,二目子程序,二目A A哑,实变量哑,实变量k ka aB B哑,实变量哑,实变量k k
23、a+2a+2T T实变量实变量k ka+4a+4寄存器保护区寄存器保护区返回地址返回地址ATB01a临时变量的地址分配n特点特点: 放中间结果放中间结果, 定值一次定值一次, 引用一次引用一次n方法方法: 用栈实现作用域的层次嵌套用栈实现作用域的层次嵌套例例. X := A*B - C * D + E * F 四元式四元式 ( *, A, B, T1 ) ( *, C, D, T2 ) ( - , T1, T2, T3 ) ( *, E, F, T4 ) ( +, T3, T4, T5 ) (:=, T5, _ , X )临时变量的地址分配 四元式四元式( *, A, B, T1 ) ( *,
24、 C, D, T2 )( - , T1, T2, T3 )( *, E, F, T4 )( +, T3, T4, T5 )(:=, T5, _ , X )临时变量名临时变量名 地址地址 T1 a T2 a+1 T3 a T4 a+1 T5 a代真后的四元式代真后的四元式 ( *, A, B, $a ) ( *, C, D, $(a+1) )( - , $a, $(a+1), $a)( *, E, F, $(a+1) )( +, $a, $(a+1), $a)(:=, $a, _ , X )内容线索目标程序运行时的活动目标程序运行时的活动运行时存储器的划分运行时存储器的划分 静态存储分配静态存储
25、分配n简单的栈式存储分配简单的栈式存储分配n嵌套过程语言的栈式实现嵌套过程语言的栈式实现简单程序语言nC语言特点语言特点没有分程序结构,过没有分程序结构,过程定义不允许嵌套程定义不允许嵌套允许过程的递归调用。允许过程的递归调用。C语言的程序结构语言的程序结构 全局数据说明全局数据说明;main( ) main中数据说明;中数据说明; void R( ); R 中数据说明;中数据说明;. . . void Q( ); Q 中数据说明;中数据说明;. . . 存储组织n非局部数据静非局部数据静态分配于栈底。态分配于栈底。n局部数据分配局部数据分配于活动记录。于活动记录。n栈式栈式: 每调用每调用一
26、个过程将其一个过程将其活动记录分配活动记录分配于栈顶,退出于栈顶,退出一个过程释放一个过程释放该空间。该空间。主程序过程Q 过程RQ的活动记录的活动记录主程序主程序活动记录活动记录TOPR的活动记录的活动记录SP参数个数参数个数返回地址返回地址形式单元形式单元内情向量内情向量局部变量局部变量老老SP临时单元临时单元全局数据区全局数据区对任何局部变量对任何局部变量X的的引用可表示为变址访引用可表示为变址访问问: dxSP dx: 变量变量X相对于活相对于活动记录起点的地址,动记录起点的地址,在编译时可确定。在编译时可确定。参数个数参数个数返回地址返回地址形式单元形式单元临时单元临时单元内情向量内
27、情向量局部变量局部变量SP 012老老SPTOP C的活动记录C过程调用n过程调用的四元式序列过程调用的四元式序列:par T1par T2 par Tncall P,n参数传递参数传递过程名过程名形参数目形参数目1) 每个每个par Ti(i=1,2,n)可直接翻译成如下指令可直接翻译成如下指令:(i+3)TOP:= Ti (传值传值)(i+3)TOP:=addr(Ti) (传地址传地址)2) call P,n 被翻译成被翻译成: 1TOP:=SP (保护现行保护现行SP) 3TOP:=n (传递参数个数传递参数个数) JSR P (转子指令转子指令)参数个数参数个数返回地址返回地址形式单元
28、形式单元内情向量内情向量局部变量局部变量老老SP临时单元临时单元TOP SP 调用过程的调用过程的活动记录活动记录形式单元形式单元老老SP参数个数参数个数C过程调用的翻译过程3) 转进过程转进过程P后,首先应执行后,首先应执行下述指令下述指令:SP:=TOP+1 (定义新的定义新的SP)1SP:=返回地址返回地址 (保护返回地址保护返回地址)TOP:=TOP+L (新新TOP) L:过程过程P的活动记录所需单元的活动记录所需单元数,在编译时可确定。数,在编译时可确定。参数个数参数个数返回地址返回地址形式单元形式单元内情向量内情向量局部变量局部变量老老SP临时单元临时单元TOP 调用过程的活动记
29、录调用过程的活动记录返回地址返回地址TOPSP4) 过程返回时,应执行下列指令过程返回时,应执行下列指令:TOP:=SP-1 (恢复调用前恢复调用前TOP)SP:=0SP (恢复调用前恢复调用前SP)X:=2TOP (把返回地址把返回地址取到取到X中中)UJ 0X (按按X返回返回)参数个数参数个数返回地址返回地址形式单元形式单元内情向量内情向量局部变量局部变量老老SP临时单元临时单元调用过程的活动记录调用过程的活动记录TOPSPSPTOP内容线索目标程序运行时的活动目标程序运行时的活动运行时存储器的划分运行时存储器的划分 n静态存储分配静态存储分配n简单的栈式存储分配简单的栈式存储分配n嵌套
30、过程语言的栈式实现嵌套过程语言的栈式实现Pascal语言n语言特点语言特点过程嵌套定义过程嵌套定义 过程递归调用过程递归调用n一个一个PASCAL过程:过程:过程头;过程头;说明段(由一系列的说明语句组成);说明段(由一系列的说明语句组成);begin执行体(由一系列的执行语句组成);执行体(由一系列的执行语句组成);endPascal过程调用规则(1)任何子程序都不能调用主程序,主程序可直接调用所有第)任何子程序都不能调用主程序,主程序可直接调用所有第1层的子层的子程序。程序。(2)任何子程序(包括主程序)可直接调用自己的直接内层子程序,)任何子程序(包括主程序)可直接调用自己的直接内层子程
31、序,但不能直接调用隔层的内层子程序。但不能直接调用隔层的内层子程序。(3)内层子程序可以直接调用自己及它的任何一层外层子程序(不包)内层子程序可以直接调用自己及它的任何一层外层子程序(不包括主程序)。括主程序)。(4)并列子程序中后说明的可以调用先说明的,而先说明的不能调用)并列子程序中后说明的可以调用先说明的,而先说明的不能调用后说明的(除非采用向前引用的方式)。后说明的(除非采用向前引用的方式)。(5)一个子程序可以调用所有与自己的某个外层子程序并列,且其说)一个子程序可以调用所有与自己的某个外层子程序并列,且其说明先于这个外层子程序的子程序。明先于这个外层子程序的子程序。(6)Pasca
32、l语言允许子程序自己调用自己,这种调用方式称为递归调语言允许子程序自己调用自己,这种调用方式称为递归调用用 program main var A, B : real; procedure P1 var B:boolean; begin end procedure P2 var A:integer; begin endbegin endA(real)B(real)B(bool)A(integr)非局部名字的访问的实现非局部名字的访问的实现 n主程序的层次为主程序的层次为0;在;在i层中定义的过程,其层中定义的过程,其层次为层次为i+1;(层数,层数, 偏移量偏移量)n过程运行时,必须知道过程运行
33、时,必须知道其其所有外层过程的所有外层过程的当前活动记录的起始地址。当前活动记录的起始地址。静态链和活动记录静态链和活动记录嵌套层次显示表嵌套层次显示表displayprogram P;var a, x : integer;procedure Q(b: integer);var i: integer;procedure R(u: integer; var v: integer);var c, d: integer;begin if u=1 then R(u+1, v).v:=(a+c)*(b-d);.end Rbegin.R(1,x);.end Qprocedure S;var c, i:in
34、teger;begina:=1;Q(c);.end Sbegina:=0;S;.end. P主程序主程序P 过程过程 S 过程过程 Q 过程过程 R 过程过程 Rn静态链静态链:指向本过程:指向本过程的的直接外层过程直接外层过程的活的活动记录的起始地址,动记录的起始地址,也称存取链。也称存取链。n动态链动态链:指向本过程:指向本过程的的调用过程调用过程的活动记的活动记录的起始地址,也称录的起始地址,也称控制链。控制链。参数个数参数个数返回地址返回地址形式单元形式单元临时单元临时单元内情向量内情向量局部变量局部变量SP012动态链动态链(老老SP)TOP 静态链静态链静态链和活动记录静态链和活动
35、记录00返回地址返回地址102a3x4SP TOPq主程序主程序P00返回地址返回地址102a3x405返回地址返回地址6070(形参个数形参个数)8c9i10SP TOP动态链动态链静态链静态链q主程序主程序P过程过程 S?第第N层过程调用层过程调用第第 N+1层过程,如何层过程,如何确定被调用过程确定被调用过程(第第 N+1层层)过程的静态链?过程的静态链?A:调用过程调用过程(第第N层层过程过程)的最新活动记录的最新活动记录的起始地址的起始地址.00返回地址返回地址102a3x405返回地址返回地址6070(形参个数形参个数)8c9i10SP TOP动态链动态链静态链静态链q主程序主程序
36、P 过程过程 S 过程过程 Q511返回地址返回地址120131(形参个数形参个数)14b(形参形参)15i16?第第N层过程调用层过程调用第第 N层过程,如何确层过程,如何确定被调用过程定被调用过程(第第 N层层)过程的静态链?过程的静态链?A:调用过程调用过程(第第N层层过程过程)的静态链的值。的静态链的值。00返回地址返回地址102a3x405返回地址返回地址6070(形参个数形参个数)8c9i10动态链动态链静态链静态链q主程序主程序P 过程过程 S 过程过程 Q 过程过程 R511返回地址返回地址120131(形参个数形参个数)14b(形参形参)15i161117返回地址返回地址18
37、11192(形参个数形参个数)20u(形参形参)21v(形参形参)22c23d24SP TOP00返回地址返回地址102a3x405返回地址返回地址6070(形参个数形参个数)8c9i10动态链动态链静态链静态链q主程序主程序P 过程过程 S 过程过程 Q 过程过程 R 过程过程 R511返回地址返回地址120131(形参个数形参个数)14b(形参形参)15i161117返回地址返回地址1811192(形参个数形参个数)20u(形参形参)21v(形参形参)22c23d241725返回地址返回地址2611272(形参个数形参个数)28u(形参形参)29v(形参形参)30c31d32TOPSP 0
38、0返回地址返回地址102a3x405返回地址返回地址6070(形参个数形参个数)8c9i10动态链动态链静态链静态链q主程序主程序P 过程过程 S 过程过程 Q 过程过程 R 过程过程 Q511返回地址返回地址120131(形参个数形参个数)14b(形参形参)15i161117返回地址返回地址1811192(形参个数形参个数)20u(形参形参)21v(形参形参)22c23d24TOPSP 1725返回地址返回地址260271(形参个数形参个数)28b(形参形参)29i30?第第N层过程调用层过程调用第第 N-x层过程,如何层过程,如何确定被调用过程确定被调用过程(第第 N-x层层)过程的静态链
39、?过程的静态链?A:沿着调用过程沿着调用过程(第第N层过程层过程)的静态链的的静态链的向前走向前走x步到达的活步到达的活动记录的静态链的值。动记录的静态链的值。嵌套层次显示表嵌套层次显示表displayn当进入一个过程后,在建立其活动记录区的同时建立一张当进入一个过程后,在建立其活动记录区的同时建立一张嵌套层次显示表嵌套层次显示表diaplay,把把diaplay表作为活动记录的一表作为活动记录的一部分。部分。n令过程令过程R的外层为的外层为Q,Q的外层为主程序为的外层为主程序为P,则过程,则过程R运运行时的行时的DISPLAY表内容为:表内容为:2R 的现行活动记录的现行活动记录的的地址地址
40、(SP 的现值的现值)1Q 的最新活动记录的最新活动记录的地址的地址0P 的活动记录的活动记录的地址的地址n问题:问题:当过程当过程P1调用过程调用过程P2而进入而进入P2后,后,P2应如何建立起自己的应如何建立起自己的display表?表?P0P1P2P0P2P1P0P1P2n问题:问题:当过程当过程P1调用过程调用过程P2而进入而进入P2后,后,P2应如何建立起自己的应如何建立起自己的display表?表?P0P1P2l2: P1的最新活动记的最新活动记录的起始地址录的起始地址P0的最新活动记的最新活动记录的起始地址录的起始地址P1的的display表表P0的最新活动记录的最新活动记录的起
41、始地址的起始地址l2: P2的最新活动记的最新活动记录的起始地址录的起始地址P2的的display表表从从P1的的display表中自底而上地取过表中自底而上地取过l2个个单元(单元(l2为为P2的层数)再添上进入的层数)再添上进入P2后后新建立的新建立的SP值就构成了值就构成了P2的的display表。表。P0P2P1l2-1: P1的最新活动的最新活动记录的起始地址记录的起始地址P0的最新活动记录的最新活动记录的起始地址的起始地址P1的的display表表P0的最新活动记录的最新活动记录的起始地址的起始地址P1的最新活动记录的最新活动记录的起始地址的起始地址P2的的display表表从从P
42、1的的display表中自底而上地取过表中自底而上地取过l2个个单元(单元(l2为为P2的层数)再添上进入的层数)再添上进入P2后后新建立的新建立的SP值就构成了值就构成了P2的的display表。表。l2: P2的最新活动记的最新活动记录的起始地址录的起始地址n问题:问题:当过程当过程P1调用过程调用过程P2而进入而进入P2后,后,P2应如何建立起自己的应如何建立起自己的display表?表?n问题:问题:当过程当过程P1调用过程调用过程P2而进入而进入P2后,后,P2应如何建立起自己的应如何建立起自己的display表?表?P0P1P2P1的最新活动记录的最新活动记录的起始地址的起始地址P
43、0的最新活动记录的最新活动记录的起始地址的起始地址P1的的display表表P0的最新活动记录的最新活动记录的起始地址的起始地址P2的的display表表从从P1的的display表中自底而上地取过表中自底而上地取过l2个个单元(单元(l2为为P2的层数)再添上进入的层数)再添上进入P2后后新建立的新建立的SP值就构成了值就构成了P2的的display表。表。l2: P2的最新活动的最新活动记录的起始地址记录的起始地址l2: P2的最新活动的最新活动记录的起始地址记录的起始地址n问题:问题:当过程当过程P1调用过程调用过程P2而进入而进入P2后,后,P2应如何建立起自己的应如何建立起自己的di
44、splay表?表?答案:从答案:从P1的的display表中自底而上地取过表中自底而上地取过l2个单元(个单元(l2为为P2的层数)再添上进入的层数)再添上进入P2后后新建立的新建立的SP值就构成了值就构成了P2的的display表。表。F把把P1的的display表地址作为连接数据之一传表地址作为连接数据之一传送给送给P2就能够建立就能够建立P2的的display表。表。P0P1P2P0P2P1P0P1P2嵌套过程语言活动记录ndiaplay表在活动记表在活动记录录中中的相对地址的相对地址d在在编译时能完全确定。编译时能完全确定。n假定在现行过程中引假定在现行过程中引用了某层过程用了某层过程
45、(令其层令其层次为次为k)的的X变量,那变量,那么,可用下面两条指么,可用下面两条指令获得令获得X的地址的地址: LD R1 (d+k)SP LD R2 dxR1参数个数参数个数返回地址返回地址形式单元形式单元临时单元临时单元内情向量内情向量局部变量局部变量SP 012老老SPTOP Display 表表全局全局Diaplay3dprogram P;var a, x : integer;procedure Q(b: integer);var i: integer;procedure R(u: integer; var v: integer);var c, d: integer;begin if
46、 u=1 then R(u+1, v).v:=(a+c)*(b-d);.end Rbegin.R(1,x);.end Qprocedure S;var c, i:integer;begina:=1;Q(c);.end Sbegina:=0;S;.end. P主程序主程序P 过程过程 S 过程过程 Q 过程过程 R 过程过程 R00返回地址返回地址10(display)2a3x405返回地址返回地址62(全局全局display)70(形参个数形参个数)809510主程序主程序过程过程 Sc11i12TOPSP 动态链动态链display00返回地址返回地址10(display)2a3x405返回地址返回地址62(全局全局display)70(形参个数形参个数)809510主程序主程序P过程过程 S 过程过程 Qc11i12动态链动态链513返回地址返回地址149(全局全局display)151(形参个数形参个数)16b(形参形参)170181319i20TOPSP 00返回地址返回地址10(display)2a3x405返回地址返回地址62(全局全局display)70(形参个数形参个数)809510主程序主程序P过程过程 S 过程过程 Q 过程过程 Rc11i12动态链动态链513返回地址返回地址149(全局全局display)15
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 古城便民公司管理制度
- 2019-2025年机械员之机械员专业管理实务通关题库(附带答案)
- 医院整套运营管理制度
- 医院耗材效期管理制度
- 大学 人才培养方案
- 原料采购定价管理制度
- 二课活动策划方案
- 云浮晚会活动方案
- 互动区域活动方案
- 互访互学活动方案
- 2025年中医基础理论考试试题及答案
- 外研版七年级英语上册跨学科项目计划
- 2025年瑜伽教练认证考试体式教学与课程设计模拟试题集(含答案详解)
- 2025年英语专业四级(TEM4)完形填空专项模拟试卷(词汇与逻辑推理)-深度解析版
- 2025年广西高一学业水平考试模拟生物试卷试题(含答案)
- 综合实践项目 设计并制作人体结构模型(教学设计) 七年级生物下册 (人教版2024)
- 山西中考:历史必考知识点
- 2025《学前教育法》宣传月培训含讲稿
- 2025榆林能源集团有限公司招聘工作人员(473人)笔试参考题库附带答案详解
- 24 唐诗三首《石壕吏》公开课一等奖创新教学设计(表格式)
- 2025危险品水路运输从业资格考试复习题(附答案)
评论
0/150
提交评论