编译原理
chapter9
运行时存储空间组织
Chapter9 运行时存储空间组织
编译原理
chapter9
运行时存储空间组织
9.1 目标程序运行时的活动 9.2 运行时存储器的划分 9.3 简单的栈式存储分配 9.4 嵌套过程语言的栈式实现 9.5 堆式动态存储分配
编译原理
chapter9
运行时存储空间组织
编译原理
chapter9
运行时存储空间组织
1. 带有静态链的活动记录 带有静态链 静态链的活动记录 静态链:它指向直接外层过程的活动记录的起始位置, 静态链:它指向直接外层过程的活动记录的起始位置, 直接外层过程的活动记录的起始位置 用于访问各外层的变量(非局部变量)。 用于访问各外层的变量(非局部变量)。
动态链:指向调用本过程的最新活动 ④. 动态链:指向调用本过程的最新活动 返回地址 记录的起始地址; 记录的起始地址; 动态链 每个活动记录的大小在编译时可以确定 SP ( 除动态数据 ),因此以 为变址器可方便的访问各个数据 ,因此以SP为变址器可方便的访问各个数据
编译原理
chapter9
运行时存储空间组织
top
u=15 v=10 形式单元 参数个数 gcd(15,10)
sp top sp
2 返回地址 老sp
x=15 y=10
main() 全局 /静态区 静态区
编译原理
chapter9
运行时存储空间组织
program p; 9.4 嵌套过程语言的栈式实现 var a,x:integer; 语言为例, 以Pascal语言为例Q(b:integer); 语言为例 由于允许嵌套定义过程, procedure ,由于允许嵌套定义过程,则会 var i:integer; 出现“非局部名字的访问”问题。 出现“非局部名字的访问”问题。因此简单的栈式存储分 procedure R(u:integer;var v:integer); 配不适用。 配不适用。 var c,d:integer; begin if u=1 then R(u+1,v) 活动记录中可配有静态链和嵌套层次表两种方式来实现。 静态链和嵌套层次表43;c)*(b-d); 两种方式来实现。 end {R} begin …. R(1,x); ……. end {Q} procedure S; var c,i:integer; begin a=1;Q(c); …….end {S} begin a=0;S;…… end