第8章 目标程序运行时的存储组织.ppt
《第8章 目标程序运行时的存储组织.ppt》由会员分享,可在线阅读,更多相关《第8章 目标程序运行时的存储组织.ppt(53页珍藏版)》请在麦多课文档分享上搜索。
1、第8章 目标程序运行时的存储组织,编译程序需进行目标程序运行环境的设计和数据空间的分配。,本章主要介绍:,静态存储分配策略,动态存储分配策略,8.1 概述,我们知道,编译程序的最终目的是将源程序翻译成等价的目标程序,为了达到此目的,编译程序除了对源程序进行词法分析、语法分析和语义分析外,在生成目标代码之前,还必需进行目标程序运行环境的设计和数据空间的分配。,所谓运行时的环境是指目标计算机的寄存器和存储器的结构,以及用来管理存储器并保存指导执行过程所需要的信息。,一般来讲,如编译程序从操作系统中得到一块存储区以使目标程序在其上运行,该存储区需容纳生成的目标代码和目标代码运行时的数据空间。,8.1
2、 概述,数据空间包括用户定义的各种类型的数据对象所需的存储空间、调用过程所需的连接单元和组织输入/输出所需的缓冲区及保留中间结果和传递参数所需的临时单元等。,因此运行时的存储空间通常被划分成:目标区、静态数据区、栈区和堆区,如下图所示。,8.1 概述,其中,目标代码区用于存放生成的目标代码,它的长度是固定的,即能在编译时确定,静态数据区用于存放编译时所能确定占用空间大小的数据,堆、栈区用于存放可变数据以及管理过程活动的控制信息。,8.1 概述,程序设计语言关于名字的作用域和生成期的定义规则决定了分配目标程序数据空间的基本策略。,在大部分现有编译中目标程序数据空间的分配策略有:,8.1 概述,静
3、态存储分配策略,分配策略,动态存储分配策略,栈式动态存储分配,堆式动态存储分配,8.1 概述,静态存储分配策略,编译时对源程序中各数据项分配固定的存储空间,运行时始终不变。,动态存储分配策略,运行阶段动态地为源程序中的数据项分配存储空间。,8.1 概述,(1) 栈式动态存储分配,用一个栈作为动态分配的存储空间。 运行时,每当调用一个子程序(过程),所需存储空间就动态地分配于栈顶,退出时释放所占用的空间。,(2) 堆式动态存储分配,运行时把存储区组织成堆,以便用户动态地申请或释放存储空间。,8.1 概述,8.2 静态存储分配,静态存储分配,编译阶段对源程序中各数据项分配固定的存储空间,运行时始终
4、不变。,如果在编译时能确定目标程序运行中所需要的全部数据空间的大小,编译时安排好目标程序运行时的全部数据空间,并确定每个数据项的存储位置(单元地址),则称这种分配策略为静态存储分配。,对语言要求,(1)程序中每一个数据对象的大小在编译阶段能够确定(即不允许有可变体积的数据如可变数组等);,(2)程序运行过程中的给定时刻,每一个数据对象只允许存在一个实例(即不允许有递归等);,8.2 静态存储分配,(3)所有数据的性质是完全确定(即不允许有须在运行时动态确定性质的名字)。,像FORTRAN77是满足上述特点的语言。,8.2 静态存储分配,FORTRAN77采用的是静态存储分配,它的程序是段结构的
5、,整个程序由主程序段和若干个子程序段组成,各程序段中定义的名字一般彼此独立,它的每个数据名所需的存储空间大小都是常量,并且不允许递归调用。这样,整个程序所需数据空间的总量在编译时就能完全确定,从而每个数据名的地址就可静态进行分配。,8.2 静态存储分配,下面给出一个FORTRAN77的程序例子,(1) PROGRAM CNSUME(2) CHARACTER * 50 BUF (3) INTEGER NEXT(4) CHARACTER C, PRDUCE(5) DATA NEXT / 1 /, BUF / /(6) 6 C=PRDUCE( )(7) BUF( NEXT : NEXT )=C(8)
6、 NEXT=NEXT+1(9) IF ( C .EN. ) GOTO 6(10) WRITE ( *, (A)BUF(11) END,8.2 静态存储分配,(12) CHARACTER FUNCTION PRDUCE( )(13) CHARACTER * 80 BUFFER (14) INTEGER NEXT(15) SAVE BUFFER , NEXT(16) DATA NEXT / 81 /(17) IF ( NEXT .GT. 80 ) THEN(18) READ ( *, (A)BUFFER(19) NEXT=1(20) END IF(21) PRDUCE=BUFFER( NEXT :
7、 NEXT )(22) NEXT=NEXT+1(23) END,8.2 静态存储分配,代码,静态数据,该图描述了程序中局部变量的静态存储位置。,8.2 静态存储分配,动态存储分配策略,运行阶段动态地为源程序中的数据项分配存储空间。,(1) 栈式动态存储分配,运行时,每当调用一个子程序(过程),所需存储空间就动态地分配于栈顶,退出时释放所占用的空间。,用一个栈作为动态分配的存储空间。,8.2 静态存储分配,8.3 动态存储分配,(2) 堆式动态存储分配,运行时把存储区组织成堆,以便用户动态地申请或释放存储空间。,如果一个程序设计语言允许递归调用、可变数组或每次调用都要重新分配局部变量,那么,就需
8、要采用动态存储分配策略。因为对于这种情况,编译程序无法知道它在运行时需要多大的存储空间,它所需要的存储空间的大小需待运行时动态地确定。,8.3 动态存储分配,为讨论方便,引入术语活动记录。过程的活动记录是一段连续的存储区,用以存放过程的一次执行所需要的信息。,活动记录至少应该包括以下几个部分,8.3 动态存储分配,1. 返回地址保存该被调过程返回后的地址。,2. 动态链指向调用该过程前的最新活动记录地址(即前一个活动记录的地址)。,SP,TOP,8.3 动态存储分配,3. 静态链指向静态直接外层最新活动记录地址的指针,用来访问非局部数据。,SP,TOP,8.3 动态存储分配,4. 形式单元存放
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 目标 程序 运行 存储 组织 PPT
