例: ■1 procedure P(w,x,y,z); begin y:=y*w; Z:=Z+Xj end 传值: 5 begin a=5; 传地址: 42 b:=3; 得结果: 7 P(a+b,a-b,a,a); 传名: 77 write(a); end 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 例: … procedure P(w,x,y,z); begin y := y*w; z := z+x; end begin a := 5; b := 3; P(a+b,a-b,a,a); write(a); end 传值: 传地址: 得结果: 传名: 5 42 7 77
编译程序为了组织存储空间,必须考虑下 面几个问题: 口过程是否允许递归? 口当控制从一个过程的活动返回时,对局部名 称的值如何处理? 口过程是否允许引用非局部名称? 口过程调用时如何传递参数;过程是否可以做 为参数被传递和做为结果被返回? ▣存储空间可否在程序控制下进行动态分配? 口存储空间是否必须显式地释放? 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 ◼ 编译程序为了组织存储空间,必须考虑下 面几个问题: 过程是否允许递归? 当控制从一个过程的活动返回时,对局部名 称的值如何处理? 过程是否允许引用非局部名称? 过程调用时如何传递参数;过程是否可以做 为参数被传递和做为结果被返回? 存储空间可否在程序控制下进行动态分配? 存储空间是否必须显式地释放?
9.2运行时存储器的划分 ■一个目标程序运行所需的存储空间包括: ▣存放目标代码的空间 口存放数据项目的空间 口存放程序运行的控制或连接数据所需单元(控制 栈) 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 9.2 运行时存储器的划分 ◼ 一个目标程序运行所需的存储空间包括: 存放目标代码的空间 存放数据项目的空间 存放程序运行的控制或连接数据所需单元(控制 栈)
■一个程序在运行时刻的内存划分: 代码(Code) 静态数据 (Static Data) 栈(Stack) ↓ 个 堆(Heap) 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 ◼ 一个程序在运行时刻的内存划分: 代码(Code) 静态数据 (Static Data) 栈(Stack) 堆(Heap)
9.2.2活动记录 ■ 假定语言的特点为:允许过程递归调用、允 许过程含有可变数组,但过程定义不允许 嵌套,如C语言。 ■采用栈式存储分配机制 ■活动记录:运行时,每当进入一个过程就 有一个相应的活动记录累筑于栈顶。此记 录含有连接数据、形式单元、局部变量、 局部数组的内情向量和临时工作单元等。 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 9.2.2 活动记录 ◼ 假定语言的特点为:允许过程递归调用、允 许过程含有可变数组,但过程定义不允许 嵌套,如C语言。 ◼ 采用栈式存储分配机制 ◼ 活动记录:运行时,每当进入一个过程就 有一个相应的活动记录累筑于栈顶。此记 录含有连接数据、形式单元、局部变量、 局部数组的内情向量和临时工作单元等