Ch8运行时存储空间组织.pptx

  1. 1、本文档共75页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

文单招、专升本试卷定制 + 关注
官方认证
服务提供商

专注于研究生产单招、专升本试卷,可定制

版权声明书
用户编号:8005017062000015
认证主体莲池区远卓互联网技术工作室
IP属地河北
统一社会信用代码/组织机构代码
92130606MA0G1JGM00

1亿VIP精品文档

相关文档