第8章 运行时刻的存储组织与管理 139页.pptVIP

第8章 运行时刻的存储组织与管理 139页.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文档。上传文档
查看更多
第8章 运行时刻的存储组织与管理 139页

第二章 高级语言及其语法描述 第二章 高级语言及其语法描述 第八章 运行时的存储组织与管理 【学习目标】 【学习指南】 概述 递归 结论: 4、声明的作用域 5、名字的绑定 绑定(Binding) 绑定的时机与策略 术语 变量名的绑定 过程/函数名的绑定 6、其它问题 ★ 运行时存储区的划分 运行时的存储区常常划分成: 目标代码区、静态数据区、栈区和堆区 栈 堆 ★活动记录 局部数据的安排 §8.1 数据空间的三种不同使用方法 和管理方法 §8.1.1 静态存储分配 在编译过程中,给程序中的变量或数组分配存储单元的一般做法是: 【例】一个FORTRAN 77的例子 适于静态存储分配的语言必须满足以下条件 静态存储分配无法克服的问题 C 语言程序的外部变量 和程序中出现的常量都可以静态分配。 §8.1.2 栈式存储分配 过程所需的数据空间包括两部分: §8.1.3 堆式存储分配 堆式存储分配示意 对于堆式存储分配,需要解决两个问题 堆式存储管理的方法 使用可利用空间表进行动态存储分配的方法又可分为如下两种: 1、定长块管理 2、变长块管理 若可利用空间表存在多个大于所要求空间的空闲块,可采取以下三种方法之一进行存储分配: 内存状态和可利用空间表 §8.2 栈式存储分配 §8.2.1 简单的栈式存储分配的实现 【例】利用Euclid算法的简单递归实现,计算两个非负整数的最大公约数。 【例】 ★过程调用、过程进入、过程返回 设计这些序列和活动记录的一些原则 长度能较早确定的域放在活动记录的中间 一般把临时数据域放在局部数据域的后面 把参数域和返回值域放在紧靠 调用者活动记录的地方 调用者和被调用者之间的任务划分 过程 p 调用过程 q 的调用序列 过程 p 调用过程 q 的返回序列 【例】对 g 的最后一次调用的情况 首先将参数 m 的值压入到运行栈中 接着将 fp 压入栈中 首先将 sp 复制到 fp 中,并将返回的地址压入栈中,就得到了g的新的调用 最后 g 在栈上分配和初始化新的 y 以完成对新的活动记录的构造 过程的参数个数可变的情况 语言若含有可变数组,则其过程活动记录的内容可如下图所示 §8.2.2 嵌套过程语言的栈式实现 语言的作用域规则确定了如何处理非局部名字的访问 PASCAL程序中过程定义的嵌套情况如下: ★ 非局部名字访问的实现(跟踪办法) ★一种是在过程活动记录中增设存取链 【例】 如何访问 a 的存储单元? ★另外一种:嵌套层次显示表(DISPLAY) 嵌套层次 display 是一个指针数组 词法作用域语言的作用域规则允许 display 通过以下步骤维护 维护步骤的验证 §8.2.3 分程序结构的存储管理 分程序结构的作用域遵循最近嵌套原则 §8.3 参数传递 §8.3.1 传值 (call by value) 【例】 传值调用的过程只能通过非局部名字或作为值传递的指针来影响其调用者 §8.3.2 引用调用 Call by Reference/Address 【例】 §8.3.3 复制-恢复 Copy-Restore §8.3.4 传名调用 本章小节 main() { /? begin of B0 ?/ int a = 0; int b = 0; { /? begin of B1 ?/ int b = 1; {/? begin of B2 ?/ int a = 2; }/? end of B2 ?/ {/? begin of B3 ?/ int b = 3; }/? end of B3 ?/ }/? end of B1 ?/ }/? end of B0 ?/ B2 int a = 2; B3 int b = 3; B1? B3 int b = 1; B0 ? B1 int b = 0; B0 ? B2 int a = 0; 作 用 域 声 明 a0 b0 b1 a2, b3 重叠分配存储单元 §8.3.1 传值 §8.3.2 引用调用 §8.3.3 复制-恢复 §8.3.4 传名调用 定义和调用过程是程序语言的主要特征之一。过程是模块程序设计的主要手段,同时也是节省程序代码和扩充语言能力的主要途径。PASCAL 语言的设计者 N.Wirth 曾经说过:“在程序设计技巧中,过程是很少几种基本工具中的一种,掌握了这种工具,就能对程序员工作的质量和风格产生决定性的影响”。 一个过程一旦定义后,就可以在别的地方调用它。 调用与被调用(过程)两者之间的信息往来通过全局量或参数传递。 返回地址 调用 g 时新的活动记录 控制链 m:1 y:0 控制链 y:1 返回地址 全局/静态区域 x

文档评论(0)

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

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

1亿VIP精品文档

相关文档