运行时的存储组织及管理,2018920,编译技术,2,运行时的存储组织及管理,概述 存储组织 运行时的存储分配策略 静态存储分配 动态存储分配 对非局部名字的访问 参数传递,2018920,编译技术,3,有关源程序中的一些问题,问题的提出:如何构造运行程序的策略和方法 过程 活动树 控制栈 说明的作
运行时的存储组织与分配.PPTTag内容描述:
1、存储分配,程序运行,环境,状态,l-value,r-value,2018/9/20,编译技术,5,存储组织,运行时刻内存的划分:假定编译器从操作系统得到一块存储区,运行时的存储空间要划分成块:生成的目标代码;数据对象;记录过程活动的控制栈对应的数据结构,2018/9/20,编译技术,6,运行时刻存储分配策略,分配策略是:静态分配;栈式分配,或称栈式动态分配;堆式分配,或称堆式动态分配。
采用哪种分配策略是由源语言的语义决定的。
,2018/9/20,编译技术,7,堆式存储分配,栈式存储分配策略在下列情况下不能使用:活动结束时必须保持局部名字的值被调用者的活动比调用者的活动的生存期长。
堆式存储器的策略:(堆管理器管理堆空间)把连续存储区域分成块,当活动记录或其他对象需要时就分配。
块的释放可以按任意次序进行,所以经过一段时间后,堆可能包含交错的正在使用的和已经释放的区域,2018/9/20,编译技术,8,堆管理器的效率问题,堆管理的效率问题是数据结构理论中的特殊问题对每个感兴趣的活动记录的大小,保存一个相应大小的空闲块的链表可能的话,为大小为s的请。
2、过程时所需的连接单元,以及组织输入 输出所需的缓冲区。
目标代码所占用空间的大小,在编译时能确定,有些数据对象所占用的空间也能在编译时确定,其地址可以编译进目标代码中。
但有些数据对象具有可变体积和待编译性质,而无法在编译时确定存储空间的位置。
因此运行时的存储区常常划分成:目标区、静态数据区、栈区和堆区。
1.存储组织目标代码区 code静态数据区Stackheap 如图就是一种典型划分,代码( code)区用以存放目标代码,这是固定长度的,即编译时能确定的。
静态数据区( static data)用以存放编译时能确定所占用空间的数据,堆栈区(stack and heap)用于可变数据以及管理过程活动的控制信息。
编译程序分配目标程序运行时的数据空间的基本依据是程序语言设计时对程序运行中存储空间的使用和管理办法的规定。
所谓数据空间的分配,本质上看,是将程序中的每个名字与一个存储位置关联起来,该存储位置用以容纳名字的值。
我们知道,即便有些名字在程序中只声明了一次,但该名字可能对应运行时不同的运行空间位置以容纳每次执行时的值。
因此,源语言的结构特点、源语言数据类型、源语言中决定名字作用域的规。
3、织好在 运行阶段的存储空间将这种组织形式通过生成的 目标代码 体现出来为运行阶段实现存储 奠定基础3北京林业大学信息学院 * 7.1 存储组织概述 7.2 静态存储分配 7.3 栈式动态存储分配 7.4 堆式动态存储分配 7.5 PL/0编译程序目标代码解释执行时的存储分配 教学内容4北京林业大学信息学院 *7.1 存储组织概述运行时存储空间的划分代码空间数据空间目标代码空间静态数据空间栈自由空间堆5北京林业大学信息学院 *过程的活动和活动记录 一个过程的 活动: 该过程的一次执行。
即每次执行一个过程体,就产生该过程的一个活动。
活动记录 :为了管理过程在一次执行中所需要的信息,使用一段连续的存储区 6北京林业大学信息学院 *活动记录的结构 7北京林业大学信息学院 *7.2 静态存储分配 在 编译阶段 由 编译程序 实现对存储空间的管理,为源程序中的变量分配存储单元。
(如看电影)条件在 编译时能够确定 变量在运行时的数据空间大小运行时不改变8北京林业大学信息学院 *FORTRAN程序的静态分配 9北京林业大学信息学院 *动态存储分配在目。