其中 CONSPART=a-C C=(…((ld2tl2)d+l3)d4++ln1)dn+ln VARPART=(…((i1d2ti2)d+i3)d4++im1)dn+in 四元式两组 VARPART→T CONSPART:→T T,T表示数组元素的地址 数组元素引用: X:=T[T] 对数组元素赋值: TT]:=X
其中 CONSPART=a-C C=(……((l 1d2+l2)d3+ l3)d4+……+ l n-1)dn+ l n VARPART=(……((i 1d2+i2)d3+ i3)d4+……+ i n-1)dn+ in 四元式 两组 VARPART T CONSPARTT1 T1 [T]表示数组元素的地址 数组元素引用: X:=T1 [T] 对数组元素赋值: T1 [T]:=X
可变(动态)数组: 若一个数组所需的存储空间的大小在 编译时就已知道,则称它为确定数组,否则称为可变(动态)数组。 数组内情向量: 编译将数组的有关信息记录在一些单元中,称为数组的“内 情向量” A[l:u2:u2 ,In Un] uj 2 2 : a(首地址)
l 可变 (动态)数组: 若一个数组所需的存储空间的大小在 编译时就已知道,则称它为确定数组,否则称为可变(动态)数组。 数组内情向量: : 编译将数组的有关信息记录在一些单元中,称为数组的 “内 情向量” A[l 1 :u 1 ,l 2 :u 2 , ,ln : un] l1 u1 l2 u2 : : type a(首地址) n C
目标程序运行时的存储组织 存储分配策略: 静态存储分配 动态存储分配— 栈式 堆式 简单的栈式分配方案 嵌套过程的栈式分配方案 分程序结构的存储分配方案
目标程序运行时的存储组织 存储分配策略: 简单的栈式分配方案 嵌套过程的栈式分配方案 分程序结构的存储分配方案 静态存储分配 动态存储分配——栈式 堆式
术语-过程活动记录:AR 为说明方便,假定程序是由过程组成,过程区分为源文本, 运行时称作过程的激活。 一个过程的一次执行所需要的信息使用一个连续的存储区来 管理,这个区(块)叫做一个活动记录或rame(帧) 般这个段要记录: ●临时值,如计算表达式时的中间工作单元。 ·局部变量(数据) ·保存运行过程前的状态(返回地址,寄存器值.…) ·存取链(可选)对于非局部量的引用。 ·控制链(可选)指向调用者的活动记录,释放栈。 ·实参(形式单元) ●返回值(对函数)(有时可使用寄存器存放返回值)
术语 l -过程活动记录 : AR 为说明方便,假定程序是由过程组成,过程区分为源文本, 运行时称作过程的激活。 一个过程的一次执行所需要的信息使用一个连续的存储区来 管理,这个区(块)叫做一个活动记录或frame(帧) 一般这个段要记录: l 临时值,如计算表达式时的中间工作单元。 l 局部变量(数据) l 保存运行过程前的状态(返回地址,寄存器值……) l 存取链(可选) 对于非局部量的引用。 l 控制链(可选) 指向调用者的活动记录,释放栈。 l 实参(形式单元) l 返回值(对函数)(有时可使用寄存器存放返回值)
简单的栈式分配方案 ·程序结构特点:过程定义不嵌套,过程可 递归调用,含可变数组; 。例:main ● 全局变量的说明 。proc R ●… ·endR; ·proc Q 。endQ; ·主程序执行语句 。end main
简单的栈式分配方案 • 程序结构特点:过程定义不嵌套,过程可 递归调用,含可变数组; • 例: main • 全局变量的说明 • proc R • …… • end R; • proc Q • …… • end Q; • 主程序执行语句 • end main