- 1、本文档共75页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 运行时存储空间组织;(1) program sort(input, output)
(2) var a: array[0..10] of integer;
(3) procedure readarray;
(4) var i: integer;
(5) begin
(6) for i:=1 to 9 do read(a[i])
(7) end;
(8) function 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) a[0]:=-9999; a[10]:=9999;
(23) readarray;
(24) quicksort(1, 9 )
(25) end.;参数传递;参数传递方式;procedure swap (var m:integer; var n: integer);
var i:integer;
begin
i:=m;
m:=n;
n:=i;
end;参数传递方式;参数传递方式;参数传递方式;PROGRAM EX
…
var A:integer;
PROCEDURE P(B:integer)
…
var A:integer;
BEGIN
A:=0;
B:=B+1;
A:=A+B;
END;;例:
…
procedure P(w,x,y,z);
begin
y := y*w;
z := z+x;
end
begin
a := 5;
b := 3;
P(a+b,a-b,a,a);
write(a);
end;;8.2 运行时存储器的划分 ;一个程序在运行时刻的内存划分:;8.2.2 活动记录;对任何局部变量X的引用可表示为变址访问:
dx[SP]
dx: 变量X相对于活动记录起点的地址,在编译时可确定。;连接数据
返回地址
动态链:指向调用该过程前的必威体育精装版活动记录地址的指针。
静态链:指向静态直接外层必威体育精装版活动记录地址的指针,用来访问非局部数据。;形式单元:存放相应的实在参数的地址或值。
局部数据区:局部变量、内情向量、临时工作单元(如存放对表达式求值的结果)。; 静态分配策略(FORTRAN)
如果在编译时能确定数据空间的大小,则可采用静态分配方法:在编译时刻为每个数据项目确定出在运行时刻的存储空间中的位置。
动态分配策略(PASCAL)
如果在编译时不能确定运行时数据空间的大小,则必须采用动态分配方法。允许递归过程和动态申请释放内存。
栈式动态分配
堆式动态分配;PROGRAM MAIN
…
integer X,Y
COMMON /C/A,B
…
END
SUBROUTINE SUB1
…
real X,Z
COMMON /C/A1,B1
…
END;8.3 静态存储管理;每个数据区有一个编号,地址分配时,在符号表中,对每个数据名登记其所属数据区编号及在该区中的相对位置。
每个局部数据区的内容及存放次序:;考虑子程序段:
SUBROUTINE SWAP(A,B)
T=A
A=B
B=T
RETURN
END;8.4 一个简单栈式存储分配; 全局数据说明
Main( )
{
Main中的数据说明
}
void R( )
{
R中的数据说明
}
…
void Q( )
{
Q中的数据说明
};每个过程的活动记录内容如图:;过程调用的四元式序列:
par T1
par T2
…
par Tn
call P,n;1) 每个par Ti(i=1,2,…n)可直接翻译成如下指令:
(i+3)[TOP]:= Ti (传值)
(i+3)[TOP]:=addr(Ti) (传地址)
2) call P,n 被翻译成:
1[TOP]:=SP (保护现行SP)
3[TOP]:=n (传递参数个数)
J
文档评论(0)