山东理工大学计算机科学与技术学院编译原理课件第十章 目标程序运行时的存储组织.pptVIP

山东理工大学计算机科学与技术学院编译原理课件第十章 目标程序运行时的存储组织.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * 第10章 运行时存储空间组织 概述 10.1 数据空间的使用方法和管理方法 存储分配策略(重点) 10.2 栈式存储分配的实现 简单的栈式存储分配 嵌套过程语言的栈式实现 (重点 难点) 10.3 参数传递 本章练习 作业 课程目录 * * 概述 p231 任务 对目标程序运行时的数据空间的组织和管理 逻辑阶段 在目标代码生成前,作准备 实质:解决关联问题 绑定(Binding) 源程序的文本——程序运行动作的实现 源文件中的名字N——运行时的存储单元S * * 运行时存储器的典型划分 p231 目标代码区 静态数据区 栈 区 堆 区 存放程序的目标代码 存放静态数据对象 管理过程调用 存放过程活动 所需的相关信息 实现动态数据分配 调用malloc等函数 时申请的存储空间 空闲存储空间 相向增长 可有效利用空间 编译时确定 运行时确定 静态存储分配 动态存储分配 栈式动态 堆式动态 章节目录 * * 10.1 存储分配策略 P231 章节目录 静态分配策略 p232 栈式存储分配 p233 堆式存储分配 p233 编译时对所有数据对象分配固定的存储单元 且在运行时始终保持不变 运行时把存储器作为一个栈进行管理 每当调用一个过程,它所需的存储空间就动 态地分配于栈顶 一旦退出,它所占空间就予以释放 在运行时把存储器组织为堆 允许用户动态申请和归还存储空间 凡申请者从堆中分给一块,凡释放者退回给堆 * * 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 ↓ ↓ ↓ 程序运行结束 * * 定义 过程的活动 一个过程的活动 是指该过程的一次执行 每次执行一个过程体,产生该过程体的一个活动 一个活动的生存期 是指从该过程体的第一步操作到最后一步操作之间的操作序 包括执行该过程时调用其它过程花费的时间 名字说明作用域 一个说明在程序里能起作用的范围 * * 活动记录(Activation Record) p234 临时单元 内情向量 局部变量 形式单元 静态链 动态链 返回地址 运行栈区中的一个栈单元 目标代码区 静态数据区 栈 区 堆 区 含义:存储管理过程活动所 需信息的一块连续的存储空间 活 动 记 录 作用:当调用过程时,将在栈顶为过程此次活动分配活动记录 * * 活动记录结构与主要内容 p234 返回地址 动态链 静态链 形式单元 局部变量 内情向量 临时单元 存放临时变量,用于表达式计算 存放局部数据(数组等) 存放局部数据(局部变量) 保存实在参数的值或地址 用于存取非局部名(display表) 保存调用者活动记录首地址(SP) 目标代码中的返回地址 SP TOP TOP 指向已用栈顶单元 SP 指向现行过程(即必威体育精装版进入工作的那个过程)的活动记录在栈里的首地址,用于访问局部数据 连接 数据 0 1 2 3 第一个形参 相对地址(相对数)=3 栈中绝对地址=SP+3=3[SP] 章节目录 * * 10.2.1 简单栈式存储分配 p234 用途 过程的局部环境 (活动记录) 对语言的限制 没有分程序结构 过程定义不许嵌套 允许过程的递归调用 适用语言 C语言 * * C语言栈式存储组织举例 p234 全局数据说明 main() { main中的数据说明 …Q();…} void R() { R中的数据说明 …} void Q() { Q中的数据说明 …R();…} 目标代码 全局数据 运 行 栈 main 执行过程 main的活动记录 SP TOP → Q Q的活动记录 SP TOP → R R的活动记录 SP TOP 静态确定全局 动态确定局部 * * C的活动记录 p235 临时工作单元 内情向量 局部变量 形式单元 n个 参数个数 n 返回地址 老SP(动态链) SP TOP 0 1 2 3 3+n 前一活动记录首地址。指明此次活动结束时,应返回的调用者活动记录首地址 目标代码中的返回地址 连接 数据 无需静态链,C的非局部

您可能关注的文档

文档评论(0)

ormition + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档