欢迎来到天天文库
浏览记录
ID:46467399
大小:503.00 KB
页数:61页
时间:2019-11-24
《目标程序运行时的存储组织》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十章目标程序运行时的存储组织概述栈式存储分配的实现简单的栈式存储分配的实现嵌套过程语言的栈式实现分程序结构的存储管理参数传递过程调用、过程进入和过程返回概述任务:编译程序对目标程序运行时的数据空间的组织和管理(设计运行环境和分配存储)如通常栈式存储分配布局可为:目标代码区静态数据区Stackheap运行环境和存储分配设计分析逻辑阶段:在目标代码生成前,作准备实质:关联(Binding)将源程序的文本程序运行动作的实现源文件中的名字N运行时的存储S在语义学中,使用术语environment函数表示env:N→S(N到S的映射)静态文本中运行时动作
2、及为实现其动作的准备(与运行时数据对象的表示有关)执行过程体控制数据对象的分配,为执行过程体使用源文本中同样的名字目标程序中不同的数据空间因为一个过程可以是递归的,这时同一个名字在不同的时间可能代表不同的存储单元过程定义过程名过程体决定存储管理复杂程度的因素——源语言本身1.允许的数据类型的多少3.程序结构决定名字的作用域的规则和结构A.段结构B.过程定义不嵌套,只允许过程递归调用C.分程序结构分程序嵌套过程定义嵌套2.语言中允许的数据项是静态确定动态确定存储分配方案策略:静态存储分配动态存储分配栈式堆式术语静态:如果一个名字的性质通过说明语句或隐或
3、显规则而定义,则称这种性质是“静态”确定的。动态:如果名字的性质只有在程序运行时才能知道,则称这种性质为“动态”确定的。可变(动态)数组:若一个数组所需的存储空间的大小在编译时就已知道,则称它为确定数组,否则称为可变(动态)数组。例procedureA(m,n:integer);beginrealz;arrayB[m:n];begin···end;end;一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区(块)叫做一个活动记录或frame(帧)过程活动记录AR(ActiveRecord):为说明方便,假定程序是由过程组成,过程区分为源文
4、本,运行时称作过程的激活。活动记录包括:临时值:如计算表达式时的中间工作单元局部变量:一个过程定义的变量(包括简单变量和可变数组的内情向量)保存运行过程前的状态存取链(可选):对于非局部量的引用控制链(可选):指向调用者的活动记录实参(形式单元)返回地址:保存该被调过程返回后的地址简单的栈式分配方案程序结构特点:过程定义不嵌套,过程可递归调用,含可变数组;例:programmain;全局变量的说明procR;……endR;procQ;……endQ;主程序执行语句endmain.Main---->Q---->RMain--->Q---->QTOP---
5、-->R的活动记录SP------>Q的活动记录主程序全局数据区SP指向现行过程记录的起点,TOP指向已占用的栈顶单元。TOP----->Q的活动记录SP------>Q的活动记录主程序全局数据区TOP---->临时工作单元局部简单变量局部数组的内情向量实参(形式单元)参数个数SP----->控制链(老SP)返回地址TOP----->R的活动记录SP------>Q的活动记录主程序全局数据区R的数组区无嵌套定义的过程活动记录内容(含有可变数组)分配了数组区之后的运行栈嵌套过程语言的栈式分配方案主要特点:(语言)一个过程可以引用包围它的任一外层过程所定
6、义的标识符(如变量,数组或过程等)。(实现)一个过程可以引用它的任一外层过程的最新活动记录中的某些数据。关键技术:解决对非局部量的引用(存取)。跟踪办法:1.用静态链(如PL/0的SL)。2.用DISPLAY表。设法跟踪每个外层过程的最新活动记录AR的位置。静态链(存取链)和活动记录在运行栈的数据区(活动记录)中增加一个静态链,从一个过程的当前活动记录指向其直接外层的最新活动记录。当过程结束时,利用动态链可以得到调用前的活动记录的基地址。临时单元内情向量简单变量形参单元形参个数静态链返回地址动态链(老sp)含静态链的活动记录连接数据sptop调用该过
7、程的过程sp值静态定义时直接外层过程的sp值例:有如下的示意性源程序(假定该语言的过程是无参数的):PROGRAMmain;VARa,b,c:real;PROGRAMx;VARd,e:real;PROGRAMy;VARf,g:real;BEGIN…END;{y}PROGRAMz;VARh,i,j:real;BEGIN…y;END;{z}BEGIN…11:z;…END;{x}BEGIN…x;…END.{main}并已知在运行时刻,以过程为单位对程序中的变量进行动态存储分配,采用静态链实现非局部名字的访问。当运行主程序而调用过程语句“
8、x;”时,试分别给出以下时刻的数据存储栈S的情形。(要求给出各静态链(SL)和动态链(DL)的值。)已开始而
此文档下载收益归作者所有