- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第十二章运行时存储空间的组织电子科技大学计算机科学与工程学院要执行和实现目标程序,需要一个运行环境来支持,要对程序中的变量进行存储分配,并提供各种运行信息。因此,本章主要讨论:运行时存储空间的组织
第一节程序的存储空间logo电子科技大学计算机科学与工程学院程序投入运行的必要条件:1.一组可运行的代码2.一个运行环境分配空间:变量、临时变量、数组、单元提供运行信息:返回地址、主调过程的存储区
一、代码空间电子科技大学计算机科学与工程学院ip代码存储器(C)数据存储器(D)假定当前指令指针ip的值为i,则当前指令的存储地址用C[i]表示线性存放着目标指令序列在GAM中,当前执行的指令位置由指令指针ip指示
电子科技大学计算机科学与工程学院二、数据空间编译程序给源程序中的各种类型的变量和常数分配的存诸空间,称为程序的数据空间。ip代码存储器(C)数据存储器(D)若某个变量分配在D的i个单元,则用D[i]表示该变量的存诸位置(地址)数据空间在运行时是可以改变的,即动态的
内容:变量、常数、控制和管理信息、描述符等静态分配:在运行前就可确定数据空间的大小在编译时刻就能进行的存储分配动态分配:运行时才能进行的存储分配电子科技大学计算机科学与工程学院栈分配:因变量生存期的嵌套性堆分配:因生存期的随机交叉特性
电子科技大学计算机科学与工程学院临时变量返回指针动态链接静态链接现场保护参数个数参数单元局部变量被调用单元返回时的地址指向调用单元最新活动记录的指针指向被调用单元直接外层的最新活动记录的指针保存调用时的机器状态调用单元向被调用单元传递的单元个数为形式参数分配的存储单元为局部变量分配的存储单元为临时变量分配的存储单元三、活动记录一个程序单元的一次激活所需的信息管理是通过相应的活动记录来实施的。一个单元的每次激活,都应建立相应的活动记录,它是单元实例的一部分。
除了变量存储区外,其余部分存储长度编译时可以确定,则元素i的地址可用下式计算D+offset(i)其中,offset(i)是i在活动记录中的位移;D是活动记录的首地址01电子科技大学计算机科学与工程学院03活动记录的特点02
变量的存储分配均绑定于相同的存储位置1.静态变量:不管在程序单元的哪一次活动中,01单元被激活后,x绑定于D+Offset(x)条件是:语言允许递归调用条件是:活动记录,变量的存储位置在编译时可以确定电子科技大学计算机科学与工程学院2.半静态变量:编译时确定相对位置,02
3.半动态变量:动态数组4.动态变量:动态分配编译时在活动记录中建立描述符例:[1..m]inta;[1..n]intb;编译时在活动记录中为动态变量设置二个指针,一个指向该变量的描述符,另一个指向该变量的存储空间电子科技大学计算机科学与工程学院
五、存储分配模式1.静态分配只允许静态变量,变量与存储区域的绑定关系在编译时便可建立,并完成存储分配。不允许递归调用,不允许动态数组,不允许动态类型的数据对象,即不允许有非静态变量。如:FORTRAN语言。电子科技大学计算机科学与工程学院
电子科技大学计算机科学与工程学院栈式分配各单元之间的调用关系遵循“后进先出”模式活动记录的建立和撤消也满足“后进先出”模式用栈分配活动记录分配方法:当激活一个程序单元时,其活动记录就动态地分配于栈顶。030405060102
R的活动记录Q的活动记录P的活动记录如:P调用Q,Q调用R.........电子科技大学计算机科学与工程学院
3.堆分配由于动态变量表示的数据对象,它的长度、个数都有可能在执行中改变,即在其生存期中动态改变,就不可能在栈上为这样的对象作分配。出现下列情况时,必须用堆式分配:(1)单元活动结束后,局部变量的值还需保留;(2)调用单元与被调用单元的生存期不满足嵌套关系,即出现交叉现象。电子科技大学计算机科学与工程学院
存储空间的组织电子科技大学计算机科学与工程学院04堆05代码01栈03静态数据02
第五节参数传递先看例子:procedureswap(a,b:integer);vartemp:integer;begintemp:=a;a:=b;b:=tempend;……callswap(x,y);…...形式参数实在参数
程序单元间通信方式有非局部环境和参数传递01参数,形参,实参02参数传递的三种类型:数据参数传递过程参数传递类型参数传递03几点说明:
以调用swap(i,a[i])为例,且调
文档评论(0)