《编译原理》课程教学课件(PPT讲稿,2022)ch9-目标程序运行时的存储组织

第9章运行时存储空间组织 ■概述 ■数据空间的使用方法和管理方法 ◆存储分配策略(重点) ■栈式存储分配的实现 ▣简单的栈式存储分配 嵌套过程语言的栈式实现(重点难点) ■参数传递 ■本章练习 ■作业 2025/4/3 课程目录国)】
2025/4/3 1 第9章 运行时存储空间组织 ◼ 概述 ◼ 数据空间的使用方法和管理方法 ◆ 存储分配策略(重点) ◼ 栈式存储分配的实现 简单的栈式存储分配 嵌套过程语言的栈式实现(重点 难点) ◼ 参数传递 ◼ 本章练习 ◼ 作业 课程目录

概述 p231 ■任务 ◆对目标程序运行时的数据空间的组织和管理 ■逻辑阶段 ◆在目标代码生成前,作准备 ■实质:解决关联问题 绑定(Binding) ◆源程序的文本—程序运行动作的实现 ◆源文件中的名字T一运行时的存储单元S 2025/4/3
2025/4/3 2 概述 p231 ◼ 任务 ◆对目标程序运行时的数据空间的组织和管理 ◼ 逻辑阶段 ◆在目标代码生成前,作准备 ◼ 实质:解决关联问题 绑定(Binding) ◆源程序的文本——程序运行动作的实现 ◆源文件中的名字N——运行时的存储单元S

运行时存储器的典型划分 p231 地址小 目标代码区 栈区,由大向小 动 圣时确定 发展 静态数据区 数据区 s存储分配 堆区,由小向 栈区 大发展 时确定 代码数据区 代码 存储分配 式动态 空闲存储空间 式动态 全局变日 静态变量 堆区 静态数据区 只滋数据(字符常量) 按定义时间顺序由小住大地 址发展 地址大 2025/4/3 章节目录冈 3
2025/4/3 3 运行时存储器的典型划分 p231 目标代码区 静态数据区 栈 区 堆 区 存放程序的目标代码 存放静态数据对象 管理过程调用 存放过程活动 所需的相关信息 实现动态数据分配 调用malloc等函数 时申请的存储空间 空闲存储空间 相向增长 可有效利用空间 编译时确定 运行时确定 静态存储分配 动态存储分配 栈式动态 堆式动态 章节目录

10.1存储分配策略P231 ■静态分配策略p232 ◆编译时对所有数据对象分配固定的存储单元 ◆且在运行时始终保持不变 ■栈式存储分配p233 ◆运行时把存储器作为一个栈进行管理 ◆每当调用一个过程,它所需的存储空间就动 态地分配于栈顶 ◆一旦退出,它所占空间就予以释放 ■堆式存储分配p233 ◆在运行时把存储器组织为堆 ◆允许用户动态申请和归还存储空间 ◆凡申请者从堆中分给一块,凡释放者退回给堆 2025/4/3 章节目绿国
2025/4/3 4 10.1 存储分配策略 P231 章节目录 ◼ 静态分配策略 p232 ◼ 栈式存储分配 p233 ◼ 堆式存储分配 p233 ◆编译时对所有数据对象分配固定的存储单元 ◆且在运行时始终保持不变 ◆运行时把存储器作为一个栈进行管理 ◆每当调用一个过程,它所需的存储空间就动 态地分配于栈顶 ◆一旦退出,它所占空间就予以释放 ◆在运行时把存储器组织为堆 ◆允许用户动态申请和归还存储空间 ◆凡申请者从堆中分给一块,凡释放者退回给堆

10.2栈式存储分配的实现p234 ■过程的活动举例 float fac(int n) 为方便讨论,程序和函 {float f; 数也看作过程。有C程序: if(n==0)f=1; else f=n*fac(n-1); 口执行时过程调用顺序: return f; fac (0) ↑ 返回值1 main() fac(1) {int i=2; 返回值1 printf(“%f,fac(i)); fac (2) ↑↓ 返回值2 ■定义了两个过程 main 运行栈 main fac (n) 显示2 程序运行结束 2025/4/3 D
2025/4/3 5 10.2 栈式存储分配的实现 p234 ◼ 过程的活动举例 为方便讨论,程序和函 数也看作过程。有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 fac(n) main ↑ fac(2) ↑ fac(1) 执行时过程调用顺序: ↑ fac(0) main的活动 fac的活动,n=2 fac的活动,n=1 fac的活动,n=0 运行栈 返回值1 返回值1 返回值2 显示 2 ↓ ↓ ↓ 程序运行结束

定义 过程的活动 一个过程的活动 ◆是指该过程的一次执行 ◆每次执行一个过程体,产生该过程体的一个活动 一个活动的生存期 ◆是指从该过程体的第一步操作到最后一步操作之 间的操作序 ◆包括执行该过程时调用其它过程花费的时间 ■名字说明作用域 ◆一个说明在程序里能起作用的范围 2025/4/3 国6
2025/4/3 6 定义 过程的活动 ◼ 一个过程的活动 ◆是指该过程的一次执行 ◆每次执行一个过程体,产生该过程体的一个活动 ◼ 一个活动的生存期 ◆是指从该过程体的第一步操作到最后一步操作之 间的操作序 ◆包括执行该过程时调用其它过程花费的时间 ◼ 名字说明作用域 ◆一个说明在程序里能起作用的范围

活动记录(Activation Record)p234 ■含义:存储管理过程活动所 需信息的一块连续的存储空间 目标代码区 临时单元 静态数据区 内情向量 活 栈区 动 局部变量 形武单元 运行栈区中的二二二二二二=二三 记 个栈单元 录 静态链 动态链 返回地址 ■ 作用:当调用过程时,将在栈顶 堆区 为过程此次活动分配活动记录 2025/4/3 国>
2025/4/3 7 活动记录(Activation Record) p234 临时单元 内情向量 局部变量 形式单元 静态链 动态链 返回地址 运行栈区中的 一个栈单元 目标代码区 静态数据区 栈 区 堆 区 ◼ 含义:存储管理过程活动所 需信息的一块连续的存储空间 活 动 记 录 ◼ 作用:当调用过程时,将在栈顶 为过程此次活动分配活动记录

活动记录结构与主要内容p234 T0P指向已用栈顶单元 T0P→ 临时单元 存放临时变量,用于表达式计算 内情向量 →存放局部数据(数组等) 局部变量 存放局部数据(局部变量) 3 形式单元 →1 保存实在参数的值或地址 2 静态链 用于存取非局部名(display表) 连接 保存调用者活动记录首地址(SP) 数据 1 动态链 SP 0 返回地址 → 目标代码中的返回地址 第一个形参 SP指向现行过程(即最 新进入工作的那个过程) 相对地址(相对数)=3 的活动记录在栈里的首地 栈中绝对地址=SP+3=3[SP] 址,用于访问局部数据 2025/4/3 章节目录国区
2025/4/3 8 活动记录结构与主要内容 p234 返回地址 动态链 静态链 形式单元 局部变量 内情向量 临时单元 存放临时变量,用于表达式计算 存放局部数据(数组等) 存放局部数据(局部变量) 保存实在参数的值或地址 用于存取非局部名(display表) 保存调用者活动记录首地址(SP) SP 目标代码中的返回地址 TOP TOP 指向已用栈顶单元 SP 指向现行过程(即最 新进入工作的那个过程) 的活动记录在栈里的首地 址,用于访问局部数据 连接 数据 0 1 2 3 第一个形参 相对地址(相对数)=3 栈中绝对地址=SP+3=3[SP] 章节目录

10.2.1简单栈式存储分配p234 ■用途 ◆过程的局部环境 ◆(活动记录) ■对语言的限制 ◆没有分程序结构 ◆过程定义不许嵌套 ◆允许过程的递归调用 ■适用语言 ◆C语言 2025/4/3 ☒g
2025/4/3 9 10.2.1 简单栈式存储分配 p234 ◼ 用途 ◆过程的局部环境 ◆(活动记录) ◼ 对语言的限制 ◆没有分程序结构 ◆过程定义不许嵌套 ◆允许过程的递归调用 ◼ 适用语言 ◆C语言

C语言栈式存储组织举例 p234 全局数据说明 main ( T0P→ R的活动记录 {main中的数据说明 SP 运动态 Q的活动记录 行确定 .Q0;.} 栈局部 void R() main的活动记录 {R中的数据说明 全局数据 静态 .} 确定 void Q() 目标代码 全局 {Q中的数据说明 .R(0;} 执行过程main→Q→R 2025/4/3 10
2025/4/3 10 C语言栈式存储组织举例 p234 全局数据说明 main() { main中的数据说明 .Q();.} void R() { R中的数据说明 .} void Q() { Q中的数据说明 .R();.} 目标代码 全局数据 运 行 栈 执行过程 main main的活动记录 SP TOP → Q Q的活动记录 SP TOP → R R的活动记录 SP TOP 静态 确定 全局 动态 确定 局部
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《编译原理》课程教学课件(PPT讲稿,2022)ch10-代码优化.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch10-目标代码生成.ppt
- 《编译原理》课程教学课件(PPT讲稿)第六章 自顶向下语法分析.ppt
- 《编译原理》课程教学课件(PPT讲稿)chap1 引论 Principles of Compiler.ppt
- 《编译原理》课程教学课件(PPT讲稿)第四章 自顶向下语法分析.ppt
- 《JAVA语言程序设计》课程教学课件(PPT讲稿)第10章 多线程.ppt
- 《JAVA语言程序设计》课程教学课件(PPT讲稿)第6章 集合.ppt
- 《C语言》课程教学资源_第01章 引论.ppt
- 《C语言》课程教学资源_第00章 课前准备.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)前言(JAVA).ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第一章 java描述.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第二章 线性表.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第三章 栈和队列.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第四章 串.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第五章 数组与广义表.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第六章 树与二叉树.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第七章 图.ppt
- 《数据结构与算法分析》课程教学资源(书籍文献)数据结构与算法分析.pdf
- 《计算机网络》课程课后习题答案(参考).doc
- 《计算机网络》课程教学资源(PPT课件讲稿)第一章 概述.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch7-8-语法制导翻译和中间代码生成2/2.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch7-8-语法制导翻译和中间代码生成1/2.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch6-LR分析.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch4-自顶而下语法分析方法.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch3-词法.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch2-文法和语言.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch1-引论 Principles of Compiler.ppt
- 《编译原理》课程教学资源(教材和参考书)编译原理-陈火旺-第3版.pdf
- 《编译原理》课程教学资源(教材和参考书)编译原理-清华张素琴-第2版.pdf
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第六章 分支限界法 Branch-and-Bound Algorithm.ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第五章 回溯算法 Backtrack Algorithm.ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第四章 贪心算法 Greedy Algorithm.ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第三章 动态规划 Dynamic Programming.ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第二章 分治与递归.ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第一章 算法概述概述(主讲:王红霞).ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第零章 算法课程简介 Design and Analysis of Computer Algorithms.ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)哈夫曼编码 Huffman Coding.ppt
- 《计算机网络》课程教学资源(PPT课件)第九章 无线网络和移动网络.ppt
- 《计算机网络》课程教学资源(PPT课件)第八章 互联网上的音频和视频服务.ppt
- 《计算机网络》课程教学资源(PPT课件)第七章 网络安全.ppt
