其中 CONSPART=a-C C=(…((1d2+2)d3+l3)d+…+ln1)dn+ln VaRPaRT=(...((i,d, +i2 d3+i3)d+.oooootin-i) dn+i 四元式两组 VARPART→T CONSPART→T1 T1[T表示数组元素的地址 数组元素引用:X:=T1T 对数组元素赋值:T1T]:=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
可变(动态)数组:若一个数组所需的存储空间的大小在 编译时就已知道,则称它为确定数组,否则称为可变(动态)数组。 数组内情向量:: 编译将数组的有关信息记录在一些单元中,称为数组的“内 情向量” All:u,I2:u2, , 1n: u] u type a(首地址) n C
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 全局变量的说明 R end r; proc end Q; 主程序执行语句 end main
简单的栈式分配方案 • 程序结构特点:过程定义不嵌套,过程可 递归调用,含可变数组; • 例: main • 全局变量的说明 • proc R • …… • end R; • proc Q • …… • end Q; • 主程序执行语句 • end main