- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章运行时的存储组织和分配
第7章 目标程序运行时的存储组织; 从逻辑上看,在代码生成前,编译程序必须进行目标程序运行环境的设计和数据空间的分配。一般来讲,假如编译程序从操作系统中得到一块存储区以使目标程序在其上运行,该存储区需容纳生成的目标代码和目标代码运行时的数据空间。; 数据空间应包括:用户定义的各种类型的数据对象(变量和常数)所需的存储空间,作为保留中间结果和传递参数的临时工作单元,调用过程时所需的连接单元,以及组织输入/输出所需的缓冲区。目标代码所占用空间的大小,在编译时能确定,有些数据对象所占用的空间也能在编译时确定,其地址可以编译进目标代码中。但有些数据对象具有可变体积和待编译性质,而无法在编译时确定存储空间的位置。; 目标代码区code
静态数据区
Stack
heap ; 编译程序分配目标程序运行时的数据空间的基本依据是程序语言设计时对程序运行中存储空间的使用和管理办法的规定。; 因此,源语言的结构特点、源语言数据类型、源语言中决定名字作用域的规则等因素影响存储空间的管理和组织的复杂程序,决定数据空间分配的基本策略。;2.数据空间的使用和管理方法分成三种:;术语; 如果在编译时能确定目标程序运行中所需的全部数据空间的大小,编译时安排好目标程序运行时的全部数据空间,确定每个数据对象的存储位置,那么则称这种分配策略为静态存储分配。; 如像FORTRAN这样的语言, 其程序是段结构的,即由主程序段和若干子程序段组成。各程序段中定义的名字一般是彼此独立的(除公共块和等价语句说明的名字以外),也即各段的数据对象名的作用域在各段中,同一个名字在不同的程序段表示不同的存储单元,不会在不同段间互相引用、赋值。;…; 另外它的每个数据名所需的存储空间大小都是 常量(即不许含可变体积的数据,如可变数组),且所有数据名的性质是完全确定的。这样,整个程序所需数据空间的总量在编译时完全确定,从而每个数据名的地址就可静态进行分配。;栈式动态存储分配: ; 过程所需的数据空间包括两部分,一部分是生存期在本过程这次活动中的数据对象,如局部变量、参数单元、临时变量等等;另一部分则是用以管理过程活动的记录信息,即当一次过程调用出现时,调用该过程的那个过程的活动即被中断,当前机器的状态信息,诸如程序计数器(返地址)、寄存器的值等,也都必须保留在栈中。;堆式动态存储分配:; 这种情况下通常使用一种称为堆式的动态存储分配方案。假设程序运行时有一个大的存储空间,每当需要时就从这片空间中借用一块,不用时再退还。;栈式存储分配的实现;术语-过程的活动记录AR(Activation Record);临时工作单元; 1、临时工作单元,比如计算表达式过程中需存放中间结果用的临时值单元。; 5、控制链,指向调用该过程的那个过程的活动记录,这也不是所有语言都需要的。; 如果一个程序设计语言允许递归过程,可变数组或可变数据结构,那么,就需要采用动态存储管理技术。; Program main;
全局变量的说明;
proc R;
……
end R;
proc Q;
……
end Q;
主程序执行语句
end.(main); 采用栈式动态分配策略,即运行时,每当进入一个过程,则为该过程分配一段存储区,当一个过程工作完毕返回时,它所占用的存储区则可释放。程序运行时的存储空间,(栈)中在某一时刻可能会包含某个过程的几个活动记录(某个过程递归调用的情况);另外,同样一个存储位置,可能不同运行时刻分配给不同的数据对象。 ;参数传递; (1)procedure exchangel(i,j:integer);
(2)var x:int eger;
(3)begin;
(4)x:=a[i];a[i]:=a[j];a [j]:=x
(5)end;
带有非局部变量和形参的PASCAL过程,非局变量a[i]和a[j]的值进行交换,i,j为形参(在这里是传值)。; 语句exchangel(m,n);表示了对过程exchangel的一次调用,其中m,n为实在参数,简称实参。我们所讨论的问题是,为执行 exchangel(m,n),形参i,j应按何种方式同实参m,n相联,换句话说,如何把实在参数传递给相应的形式参数呢?; 在一个赋值语句a[i]:=a[j]中,表达式a[j]表示一个值,而a[i]表示一个存储位置,用于存放a[j]的值。通常术语左值(L—value)指 表达式代表的存储,右值(R—value)指该 存储位置中含有的值。“左”和“右”来自赋值语句的“左”端和“右”端。参数传递方法的不同主要基于实在参数是表达一个右值,一个左值,还是实在参数本身
您可能关注的文档
最近下载
- 型钢悬挑卸料平台监理实施细则.doc VIP
- 2025版最新建设工程强制性条文汇编.pdf VIP
- (高清版)DG∕TJ 08-2105-2022 行道树栽植与养护技术标准.pdf VIP
- 无人机组装与调试:多旋翼无人机飞控系统组装调试PPT教学课件.pptx VIP
- 检验检测机构资质认定质量手册和程序文件(质量记录表格汇编).doc VIP
- 建筑机电安装培训.pptx VIP
- 初三物理课件第十六章 3节 电阻课件初三物理课件第十六章 第3节 电阻课件.ppt VIP
- 低空经济产业园招商引资与项目管理.docx VIP
- 燃气经营安全重大隐患判定标准课件.pptx VIP
- 2025年学校基孔肯雅热防控工作预案(精选模板).docx
文档评论(0)