- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
调用者数据区 i
第九章 运行时存储空间组织 第九章运行时存储空间组织 编译程序在完成词法、语法和语义分析后,在生成目标代码之前,需要把程序的静态正文和实现这个程序的运行时的活动联系起来弄清楚将来在代码运行时刻,源代码中的各种变量、常量等用户定义的量是如何存放的,如何去访问它们。 在程序的执行过程中,程序中数据的存取是通过与之对应的存储单元来进行的。在程序语言中,程序使用的存储单元都是由标识符来表示的。它们对应的内存地址都是由编译程序在编译时或由其生成的目标程序运行时进行分配。所以对于编译程序来说存储组织与管理是一个复杂而又十分重要的问题。这一章就是对目标程序运行时的活动和运行环境进行讨论,主要讨论存储组织与管理, 包括活动纪录的建立与管理、存储器的组织与存储分配的策略、非局部名称的访问等问题。 9。1 目标程序运行时的活动 9。1。1 过程的活动 这一节讨论一个过程的静态源程序和它的目标程序在运行时的活动之间的关系。 一个过程的活动指的是该过程的一次执行。 关于过程P一个活动的生存期,指的是从执行该构成体第一步操作到最后一步操作之间的操作序列,包括执行P时调用其他过程化费的时间。一般来说,术语“生存期”指的是在程序执行过程中若干步骤的一个顺序序列。 一个说明在程序里能起作用的范围成为该说明的作用域。 9。1。2 参数传递 要掌握在过程调用时出现的:形式参数, 实在参数等基本概念。 传地址, 传值, 传名 三种参数传递方法。由于传递参数的方法不同,同样的程序运行的结果可能大不相同。 9。2 运行时存储器的划分 9。2。1 运行时存储器的划分 编译程序为了使它编译后得到的目标程序能够运行,要从操作系统中获得一块存储空间。从上一节的讨论我们知道,对这块提供运行的空间应该进行划分以便存放其中包括生成的目标代码、数据对象和跟踪过程活动的控制栈。 9。2。2 活动纪录 为了管理过程在一次执行中所需要的信息,使用一个连续的存储块,我们把这样的一个连续存储块称为活动纪录。 当前活动纪录一般包括如下内容: 连接数据 返回地址 动态链:指向调用该过程前的最新活动纪录地址的 指针。运行时,是运行栈上各数据区按动态建立的次序结成链。链头为栈顶起始位置。 静态链:指向静态直接外层最新活动纪录地址 的指针,用来访问非局部数据。 形式单元:存放相应的实在参数的地址或值。 局部数据区:局部变量、内情向量、临时工作单元(如存放对表达式求值的结果)。 9。2。3存储分配策略 不同的编译程序关于数据空间的存储分配策略可能不同。静态分配策略在编译是对所有对象分配固定的存储单元。且在运行是保持不变。栈式动态分配策略在运行时把存储器作为一个栈进行管理,运行时,每当调用一个过程,它所需要的存储空间就动态的分配于栈顶,一旦退出,它所占空间就予以释放。堆式动态存储策略在运行时把存储器组织成堆结构,以便用户关于存储空间的申请与归还(回收),凡申请者分给一块,凡释放者退回给堆。 9。3静态存储分配 如果在编译时就能够确定一个程序在运行时所需要的存储空间的大小,则在编译时就能够安排好目标程序运行时的全部数据空间,并能确定每个数据项的单元地址。存储空间的这种分配方法叫做静态分配。 这一节要特别注意临时变量的地址分配方法。 尽管在翻译时大量引进了临时变量名,但是并不是对每一个名字分配一个不同的存储单元,那样做太浪费空间了。一个一般的原则是如果两个临时变量的名字作用域不相交,则他们可分配在同一单元中,一个临时变量名自它第一次被定值(赋值)的地方起直至它最后一次被引用的地方止,这区间的程序所能到达的全体四元式,构成了它的作用域。 对于用来暂存表达式中间结果的临时变量名而言,只存在一次定值和一次引用,并且在定值和引用之间不存在分叉转移(无论转进或转出)这类临时变量名作用域的确定是非常简单的。它们的存储分配可用一种特别简易的办法实现。 我们说过,大部分的临时变量名是用来存放表达式的中间结果。这些临时变量有一个特点。它们均只被定值一次,被引用一次。它们的作用域如同配对的括号序列所管辖的区一样是层次嵌套的。因此我们可以设想用一个栈(先进后出区)来存放这类临时变量名的值。 也就是说,可以用一个栈来存放表达式记值过程中的中间结果。为简单
您可能关注的文档
最近下载
- 通桥(2017)2101-Ⅱ时速160公里客货共线铁路预制后张法简支T梁24m.pdf
- 胡壮麟《语言学教程》(第5版)@第七章@复习笔记.pdf
- 2018年中级经济师考试《保险专业知识与实务》电子书.pdf VIP
- 公路收费站(所)风险管控清单.docx VIP
- 君正化工杜邦安全管理理念实施方案.pptx
- 在线网课学习课堂《空间句法与数据化设计——环境行为数据分析及设计应用》单元测试考核答案.docx
- 全面从严治党主体责任约谈资料汇编.docx VIP
- 2024年华为认证HCIA-5G(H35-660)考试题库(附答案).pdf VIP
- 《Web 程序设计》说课.ppt
- 数字经济-第1篇.pptx
文档评论(0)