第10章目标程序运行时的存储组织 (2)ppt课件_第1页
第10章目标程序运行时的存储组织 (2)ppt课件_第2页
第10章目标程序运行时的存储组织 (2)ppt课件_第3页
第10章目标程序运行时的存储组织 (2)ppt课件_第4页
第10章目标程序运行时的存储组织 (2)ppt课件_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第10章 目的程序运转时的存储组织 10.1 概述10.2 栈式存储分配的实现10.3 参数传送10.4 过程调用、过程进入和过程前往教学内容:教学方式: 讲授式+启发式教学目的:1、引见目的程序运转时的存储组织方式,包括静态存储分配和动态存储分配。 2、要求掌握各种存储组织方式的根本方法。 教学重点: 1、静态分配战略和动态分配战略根本思想。 2、嵌套过程言语栈式分配。 3、活动记录、运转时栈的组织。教学难点:1、嵌套过程言语栈式分配。2、活动记录、运转时栈的组织。 教学时数: 2学时 10.1 概述义务:编译程序对目的程序运转时的数据空间的组织和管理设计运转环境和分配存储 如 通常存储分配

2、规划可为: 目的代码区 静态数据区 Stack heap运转环境和存储分配设计分析逻辑阶段:在目的代码生成前,作预备本质: 关联Binding将源程序的文本 程序运转动作的实现 源文件中的名字N 运转时的存储S在语义学中,运用术语environment函数表示env: NS (N到S的映射)术语静态:假设一个名字的性质经过阐明语句或隐或显规那么而定义,那么称这种性质是“静态确定的。动态:假设名字的性质只需在程序运转时才干知道,那么称这种性质为“动态确定的。可变 (动态)数组: 假设一个数组所需的存储空间的大小在编译时就知道,那么称它为确定数组,否那么称为可变(动态)数组。例 procedure

3、 A(m,n:integer); begin real z; array Bm:n; begin end; end;10.2 栈式存储分配的实现1、简单的栈式存储分配的实现2、嵌套过程言语的栈式实现3、分程序构造的存储管理1、 简单的栈式分配方案程序构造特点:没有分程序构造,过程定义不嵌套,过程可递归调用。 例: main 全局变量的阐明 proc R end R; proc Q end Q; 主程序执行语句 end main 2、嵌套过程言语的栈式分配方案主要特点:言语一个过程可以援用包围它的任一外层过程所定义的标识符如变量,数组或过程等。实现一个过程可以援用它的任一外层过程的最新活动记录中

4、的某些数据。 关键技术:处理对非部分量的援用存取。设法跟踪每个外层过程的最新活动记录AR的位置。跟踪方法: 1. 用静态链如PL/0的SL。 2. 用DISPLAY表。DISPLAY表的维护和建立 DISPLAY表d 运转栈 0 主程序活动记录地址 1 R活动记录地址DISPLAY表是一个指针数组d小栈, 自顶向下每个单元依次存放现行层,直接外层,直至最外层0层等每层的最新活动记录地址。 . 用Display表的方案(1)主程序-(2)P-(3)Q-(4)R P 的活动记录主程序的活动记录 d1d0displaysptop主程序的活动记录 d0spdisplaytop12用Display表的方

5、案主程序-P-Q-RR 的活动记录 Q 的活动记录 P 的活动记录主程序的活动记录Q 的活动记录 P 的活动记录主程序的活动记录 displayd2d1d0 d1d0 displaysptoptopsp34 当过程的层次为n,它的 display为n+1个值。 一个过程被调用时,从调用过程的DISPLAY表中自下向上抄录n个SP值,再加上本层的SP值。全局DISPLAY地址Display作为活动记录的一部分 Procedure A(m,n); integer m,n; B1:begin real z; array Bm:n; B2:begin real d, e; L3: 2 end; B4:

6、begin array C1:m; 1 B5:begin real e; L6: 5 4 end; end; L8:end; 3、分程序构造的存储配方案 处置分程序构造存储分配方案的一种简一方法是,把分程序看成 “无参过 程,它在哪里定义就在哪里被调用。因此,可以把处置过程的存储方法运用四处置分程序中。但这种做法是极为低效的。 一那么,每逢进入 一个分程序,就照样建立衔接数据和DISPLAY表,这是不用要的。 二那么 ,当从内层分程序向外层转移时,能够同时要终了假设干个分程序。 按照过程处置方法,意味着必需一层一层地经过“前往 来恢复所要到达的那个分程序的数据区,但不能直接到达。例如:假设有一

7、个从第5层分程序转出到达第1层分程序的标号L,虽然在第5层分程序任务时知道L所属的层数,我们极易从DISPLAY中获得第1层分程序的活动记录基址SP,但是怎样知道第1层分程序进入时的TOP呢?独一的方法是从 5,4,3和2各层顺序退出。但这种方法是很浪费时间的。 为理处理上述问题,可采取两种措施。第一,对每个过程或分程序都建立有本人的栈顶指示器TOP,替代原来仅有过程的栈顶指示器, 每个TOP的值保管在各自活动记录中。这样,上述的第二个问题便可处理。第二,不把分程序看作“无参过程,每个分程序享用包围它的那个最近过程的DISPLAY。每个分程序都隶属于某个确定的过程,分程序的层次是相对于它所属的

8、那个过程进展编号的。 每个过程被当作是0层分程序。而过程体分程序假定是一个分程序当作是它所管辖的第1层分程序。这样,每个过程的活动记录所含的内容有:1.过程的TOP值,它指向过程活动记录的栈顶位置。2.衔接数据,共四项: 1)老SP值;2)前往地址; (3)全局DISPAY地址;4)调用时的栈顶单元地址,老TOP。 3. 参数个数和方式单元 4. DISPAY表。5. 过程所辖的各分程序的部分数据单元。 对于每个分程序来说,它们包括:1)分程序的TOP值。当进入分程序时它含现行栈顶地址,以后,用来定义栈的新高度分程序的TOP值;2)分程序的部分变量, 数组内情向量和暂时任务单元。B Z B1T

9、 O 数 组B 数 组B e dB22的T O PB的 内 情 向 量B 的 内 情 向 量 z zB1 的T O PB1的T O PD I S P L A YD I S P L A Y 方式单元 m,n 2 方式单元 m,n 2连 接 数 据衔接 数 据A的T O PA的T O P (c) (d)(c )数组B分配之后; d进入分程序B22; 10.3 参数传送(1)procedure exchangel(i,j:integer);(2) var x:integer;(3) begin;(4) x:=ai; ai:=aj; aj:=x(5) end; 带有非部分变量和形参的PASCAL过程非

10、局变量ai和aj的值进展交换,i,j为形参在这里是传值 (1)program reference(input,output);(2)var a,b:integer;(3)procedure swap(var x,y:integer);(4) var temp:integer;(5) begin (6) temp:=x;(7) x:=y;(8) y:=temp(9) end;(10)begin(11) a:=1; b:=2;(12) swap(a,b);(13) writeln(a=,a);writeln(b=,b)(14)end. 带有过程swap的PASCAL程序 传地址变量参数 例如:过程

11、 swap(var x,y:integer); swap(a,b; a,b为调用时的实参 调用结果a,b的值被改动。传值值调用特点是对方式参数的任何运算不影响实参的值。 例如:过程 swap(x,y:integer); swap(a,b;其结果: a,b调用前的值不改动。传值的实现1.方式参数当作过程的部分变量处置,即在被调过程的活动记录中开辟了形参的存储空间,这些存储位置即是我们所说的方式单元用以存放实参。2.调用过程计算实参的值,并将其放在对应方式单元开辟的空间中。3.被调用过程执行时,就像运用部分变量一样运用这些方式单元。procedure swap( x,y:integer); var

12、 temp:integer; begin temp:=x; x:=y; y:=temp end; 调用swap(a,b) 过程将不会影响a和b的值。 其结果等价于执行以下运算: x :=a; y :=b; temp :=x; x :=y; y :=temp传地址的实现call- by- reference )(call-by-address)(call-by-location) 把真实参数的地址传送给相应的形参,即 调用过程把一个指向实参的存储地址的指针传送给被调用过程相应的形参:1真实参数是一个名字,或具有左值的表达式-传送左值2真实参数是无左值的表达式-计算值,放入一存储单元,传此存储单元

13、地址3目的代码中,被调用过程对形参的援用变成对传送给被调用过程的指针的间接援用procedure swap( x,y:integer); var temp:integer; begin temp:=x; x:=y; y:=temp end; 调用swap(i,ai) 其结果等价于执行以下运算: 1把 I和ai的地址分别放到x和y相应的单元a1,a2 2( temp :=x;)temp的内容置为a1所指单元中存的内容 3 (x :=y;) a1所指单元的内容置为a2所指单元值4( y :=temp) a2所指单元的内容置为temp的值 (1)swap(x,y)(2)int *x,*y;(3) i

14、nt temp;(4) temp=*x; *x=*y; *y=temp;(5)(6)main( )(7) int a=1,b=2;(8) swap(&a,&b);(9) printf(“a is now %d,b is now %dn,a,b);(10) 在一个值调用过程中运用指针的C程序在C程序中无传地址所以用指针实现。过程调用的四元式序列 S call id() ,E Epar T1par T2par Tncall id,n 过程作为参数传送三种环境:词法环境 传送环境 活动环境 program param(input,output); procedure b(function h(n:i

15、nteger):integer);(*) var m:integer; begin m:=3; writeln(h(2) endb; procedure c;(*) var m:integer; function f(n:integer):integr;(&) begin f:=m+n endf; begin m:=0; b(f) end c begin c end. (1)program param(input,output);(2)procedure b(function h(n:integer):integer);(3) begin writeln(h(2) endb;(4)procedure c;(5) var m:integer;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论