第8章 运行时刻存储组织与管理.ppt

  1. 1、本文档共139页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 运行时刻存储组织与管理

第八章 运行时的存储组织与管理;【学习目标】 ;【学习指南】;目标程序运行时,存储区域的整体布局,以及各区域的作用。 各种不同类型的数据表示。 允许过程嵌套定义的情况,栈式动态分配的组织管理。 对过程的调用,进入和退出时,栈式动态分配的工作原理。 过程活动纪录的各项内容和它们的作用,以及活动纪录的组织方式。 过程参数传递的不同方式。;敝家鲍腰亨圣倦呕祸烩下抚烤谈讽恬池租呵传揉握类互锅炙肝青礁典控鲜第8章 运行时刻存储组织与管理第8章 运行时刻存储组织与管理;概述;★ 有关源程序中的一些问题;1、过程;2、活动树 ;特点:;执行开始 ??? enter readarray ??? leave readarray ?? ? enter quicksort(1,9) ??? enter partition(1,9) ??? leave partition(l,9) ??? enter quicksort(1,3) ??? ................ ??? leave quicksort(1,3) ??? enter quicksort(5,9) ??? ................ ??? leave quicksort(5,9) ??? leave quicksort(1,9) 执行结束;递归;用一颗树来描绘控制进入和离开活动的途径。这祥的树称作活动树。 在一棵活动树中: ???1. 每一个结点代表一个过程的活动; ???2. 根结点代表主程序的活动; ???3. 代表 a 的结点是 b 结点的父结点当且仅当控 制从活动 a 进入活动 b; ???4. 结点 a 在结点 b 的左边当且仅当 a 的生存期 发生在 b 的生存期之前。;s;结论:;3、控制栈;栈;控制栈中的活动都是活跃的,当前控制进入的活动在栈顶; 从栈顶活动到栈底活动的活动序列是从活动树上当前结点通向根的路径上的结点序列: ? s,q(1,9),q(l,3),q(2,3) 并且除此之外没有其它节点。 从栈底活动到栈顶活动的活动序列表示了活动的生存期的嵌套关系。;结论: 扩充控制栈可用来实现如 Pascal 语言的栈式存储分配; 进入一个活动,在栈顶建立这个活动所使用的存储空间; 这个活动结束,从栈顶弹出其使用的存储空间。;4、声明的作用域;5、名字的绑定;在程序设计语言语义学中;环境和状态是有区别的: 赋值改变状态,但不改变环境。 【例】 如果变量 pi 的存储单元地址是 2000,其值是 0, 那么在赋值语句 pi = 3.14 执行之后, pi 的存储单元地址仍然是 2000,但它保存的值变为 3.14;绑定(Binding);绑定的时机与策略;术语;变量名的绑定;过程/函数名的绑定;静 态 概 念 ;6、其它问题;分段式程序 Program layer Int a,b,c Begin …… Sub(a+b,b,a) …… End Subroutine Sub(x,y,z) Real a,b,c Begin …… End;★ 运行时存储区的划分;运行时的存储区常常划分成: 目标代码区、静态数据区、栈区和堆区;栈;堆;★活动记录;临时工作单元;几乎所有的这些域的大小在编译时是已知的,如果局部变量中包含有可变数组,那么则采用内情向量,将内情向量置于过程活动记录中。 另外,有些语言的编译程序还将参数个数存放于活动记录中,以便进行参数个数的检查。 注意:并不是所有语言的编译程序全部使用这些信息。 ;局部数据区中的一个栈单元----活动记录;局部数据的安排;在 SPARC/Solaris 工作站上下面两个结构的 size 分别是 24 和 16,为什么不一样? typedef struct _a{ typedef struct _b{ char c1; 0 char c1; 0 long i; 4 char c2; 1 char c2; 8 long i; 4 double f; 16 double f; 8 }a; }b;;在 X86/Linux 机器的结果和 SPARC/Solaris 工作站不一样,是 20 和 16。;§8.1 数据空间的三种不同使用方法 和管理方法;§8.1.1 静态存储分配;程序是段结构的,即由主程序段和若干子程序段组成。 程序 = 主程序段 + 若干子程序段 各程序段中定义的名字一般是彼此独立的。 (除公共块和等价语句说明的名字以外),也即各段的数据对象名的作用域在各段中,同一个名字在

您可能关注的文档

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档