ch10-目标程序运行时存储组织.pptVIP

  1. 1、本文档共77页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ch10-目标程序运行时存储组织.ppt

第二章 高级语言及其语法描述 第二章 高级语言及其语法描述 第十章 目标程序运行时的存储组织 概 述 数据空间包括: 运行时存储器的划分 编译程序分配程序运行时的数据空间的依据: §10.1 数据空间的使用方法和管理方法 §10.1.1 静态存储分配 【例】一个FORTRAN 77的例子 采用静态存储分配的语言满足的条件 §10.1.2 栈式存储分配 过程所需的数据空间包括两部分: §10.1.3 堆式存储分配 堆式存储分配示意 堆式存储分配需要解决的两个问题: 堆式存储管理的方法: 堆式动态存储分配的实现 1、定长块管理 2、变长块管理 若可利用空间表存在多个大于所要求空间的空闲块,可采取如下的分配策略: 内存状态和可利用空间表 §10.2 栈式存储分配 §10.2.1 简单的栈式存储分配的实现 【例】利用Euclid算法的简单递归实现,计算两个非负整数的最大公约数。 §10.2.2 嵌套过程语言的栈式实现 语言的作用域规则确定了如何处理非局部名字的访问 PASCAL程序中过程定义的嵌套情况如下: ★ 非局部名字访问的实现(跟踪办法) ★一种是在过程活动记录中增设存取链 【例】 如何访问 a 的存储单元? ★另外一种:嵌套层次显示表(DISPLAY) 嵌套层次 display 是一个指针数组 词法作用域语言的作用域规则允许 display 通过以下步骤维护 维护步骤的验证 §10.2.3 分程序结构的存储管理 分程序结构的作用域遵循最近嵌套原则 §10.3 参数传递 §10.3.1 传值 (call by value) 【例】 §10.3.2 传地址(引用调用) Call by Reference/Address 传值调用可以通过非局部量或由指针方法影响调用过程 §10.3.3 传结果(Call by Result) ((复制-恢复) Copy-Restore) §10.3.4 传名调用-是Algol 60特有的一种形、实参传递方式 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 重叠分配存储单元 定义和调用过程是程序语言的主要特征之一。过程是模块程序设计的主要手段,同时也是节省程序代码和扩充语言能力的主要途径。一个过程一旦定义后,就可以在其它位置调用它。 调用过程与被调用过程之间的通信是通过非局部量或参数传递的。 a-非局部量数组 i,j-形参 exchange1(m,n)-对过程的一次调用,其中m,n为实参。 如何将实参传递给形参呢? 形参与实参结合的方式,来源于一个表达式的表示的不同解释。 例如:赋值语句a[i]:= a[j] 表达式a[j]代表值,a[i]代表值要被存入的存储单元。 参数传递方法之间的不同主要基于实参表达的是一个左值、右值还是实参的正文本身。 形参与实参结合的方式 左值:指表达式代表的存储。 右值:指存储位置中含有的值。 参数传递方式: 传值(Call by value) 传地址(Call by reference) 传名(Call by name) 传结果(Call by result) 计算实参,并把实参的右值传给被调用过程。 传值(值调用)的实现方法: 形参当作过程的局部变量处理,即在被调过程的活动记录中开辟了形参的存储空间,这些存储位置即是实参或形式单元。 调用过程计算实参的值,并将它们的右值放在为形式单元开辟的空间中。 被调用过程执行时,就像使用局部变量一样使用这些形式单元。 传值调用的特点: --对形参的改变不影响调用过程的活动记录中实参的值。 调用者 被调用者直接使用 A 实际参数A 形式参数X A的值 单向传值 swap(int x, int y) { int temp; temp = x; x = y; y = temp; } 调用 swap(a,b)将不会影响 a 和 b 的值。 其结果等价于执行

文档评论(0)

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

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

1亿VIP精品文档

相关文档