第九章运行时存储空间组织 ■概述 ■目标程序运行时的活动 ■运行时存储器的划分(Partition) ◆存储分配策略(重点) ■j 静态存储分配(Static Allocation) ■ 动态存储分配(Dynamic Allocation) ◆栈式(Stack)存储分配 ▣简单的栈式存储分配 嵌套过程语言的栈式实现(重点难点) ◆堆式Heap)存储分配策略 ■ 本章练习 作业 2025/4/2 课程目录
2025/4/2 1 第九章 运行时存储空间组织 ◼ 概述 ◼ 目标程序运行时的活动 ◼ 运行时存储器的划分(Partition) ◆ 存储分配策略(重点) ◼ 静态存储分配(Static Allocation) ◼ 动态存储分配(Dynamic Allocation) ◆ 栈式(Stack)存储分配 简单的栈式存储分配 嵌套过程语言的栈式实现(重点难点) ◆ 堆式(Heap)存储分配策略 ◼ 本章练习 ◼ 作业 课程目录
概述 p238 任务 ◆对目标程序运行时的数据空间的组织和管理 逻辑阶段 ◆在目标代码生成前,作准备 ■实质:解决关联问题 绑定(Binding) ◆源程序的文本—程序运行动作的实现 ◆源文件中的名字N一运行时的存储单元S 拿节目录 2025/4/2
2025/4/2 2 概述 p238 ◼ 任务 ◆ 对目标程序运行时的数据空间的组织和管理 ◼ 逻辑阶段 ◆ 在目标代码生成前,作准备 ◼ 实质:解决关联问题 绑定(Binding) ◆ 源程序的文本——程序运行动作的实现 ◆ 源文件中的名字N——运行时的存储单元S 章节目录
10.1目标程序运行时的活动p239 ■过程的活动举例 float fac(int n) 为方便讨论,程序和函 {float f; 数也看作过程。有C程序: if(n=0)f=1; else f=n*fac(n-1); 口执行时过程调用顺序: return f; fac(0) 返回值1 } fac(1) main() 返回值1 {int i=2; ↑ printf(%f”,fac(i)); fac(2) 返回值2 ■定义了两个过程 main 显示2 运行栈main fac(n) 2025/4/2 程序运行结束
2025/4/2 3 10.1 目标程序运行时的活动 p239 ◼ 过程的活动举例 为方便讨论,程序和函 数也看作过程。有C程序: float fac(int n) {float f; if (n==0) f=1; else f=n*fac(n-1); return f; } main( ) {int i=2; printf(“%f” ,fac(i)); } ◼ 定义了两个过程 main ↑ main fac(n) fac(2) ↑ fac(1) 执行时过程调用顺序: ↑ fac(0) main的活动 fac的活动,n=2 fac的活动,n=1 fac的活动,n=0 运行栈 返回值1 返回值1 返回值2 显示 2 ↓ ↓ ↓ 程序运行结束
定义过程的活动p240 ■一个过程的活动 ◆是指该过程的一次执行 ◆每次执行一个过程体,产生该过程体的一个活动 一个活动的生存期 ◆是指从该过程体的第一步操作到最后一步操作之间的操 作序 ◆包括执行该过程时调用其它过程花费的时间 ■名字说明作用域 遵◆一个说明在程序里能起作用的范围 2025/4/2 >
2025/4/2 4 定义 过程的活动 p240 ◼ 一个过程的活动 ◆ 是指该过程的一次执行 ◆ 每次执行一个过程体,产生该过程体的一个活动 ◼ 一个活动的生存期 ◆ 是指从该过程体的第一步操作到最后一步操作之间的操 作序 ◆ 包括执行该过程时调用其它过程花费的时间 ◼ 名字说明作用域 ◆ 一个说明在程序里能起作用的范围
参数传递 p241 ■调用与被调用者之间的信息传递 实在参数形式参数 ■传递的三种不同途径 ◆传地址(cal1 by refrence) ◆传值(cal1 by value) ◆传名(cal1 by name) 2025/4/2 章节目录
2025/4/2 5 参数传递 p241 ◼ 调用与被调用者之间的信息传递 实在参数 形式参数 ◼ 传递的三种不同途径 ◆ 传地址(call by refrence) ◆ 传值(call by value) ◆ 传名(call by name) 章节目录