运行时存储空间组织.pptx

  1. 1、本文档共78页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 运行时存储空间组织; 过程的活动与参数传递;例如,下面的C语言程序: #include “stdio.h” void showme (int a, int b, int c) { printf (“a=%d, b=%d, c=%d\n”, a, b, c); } main (?) { int x=10, y=20, z=30; showme (z, y, x); }; 其中a、b、c称为形式参数(简称形参) 函数调用语句: showme (z, y, x)中的z、y、x则称为实在参数(简称实参)。实参甚至也可以是一个较复杂的表达式而不仅仅只是一个变量。实参和对应的形参在性质上应相容不悖。 ;过程的活动; 形式参数提供了参数替换的手段,在过程调用时可以使用不同的数据作为实在参数来替换形式参数,从而实现了同一个过程可以对不同的实在参数进行相同操作的功能。那么,如何把实在参数传递给相应的形式参数呢?程序语言中参数传递的方式主要有传值(call by value)、传地址(call by reference)和传名(call by name)三种。 ;1.传值 传值是最简单的参数传递方法。所谓传值,就是计算出实在参数的值然后把它传给被调用过程相对应的形式参数,具体过程如下: (1) 把形式参数当作过程的局部变量处理,即在被调用过程中开辟形式参数的存储空间(即形式单元)。 (2) 调用过程计算出实在参数的值,并将该值放入为形式单元开辟的空间中。 ; (3) 被调用过程执行时就像使用局部变量一样使用这些形式单元。 传值的一个重要特点是对形式参数的任何运算都不影响调用过程实在参数的值,即参数传递后实在参数与对应的形式参数不再发生联系了。 ;2.传地址 所谓传地址,是指把实在参数的地址传递给相应的形式参数所对应的形式单元。如果实在参数是一个变量,则直接将该变量的地址传给相应的形式单元;如果实在参数是常数或表达式,则先计算其值并存放在某一临时单元中,然后将这个临时单元的地址传给相应的形式单元。; 被调用过程执行时,对形式参数的任何引用或赋值都被处理成对形式单元的间接访问,即按形式单元中存放的地址转到调用过程中去访问实在参数。 对形式参数的任何运算实际上都是对实在参数的运算,而形式参数只不过起到辅助查找到实在参数的指针的作用。因此,当被调用过程工作完毕返回时,形式单元所指的实在参数单元就保留了运算的结果。 ;3.传名 传名是高级语言ALGOL 60所定义的一种特殊的参数传递方式,其传递参数的方法如下: (1) 过程调用的作用相当于把被调用过程的过程体复制到调用处(替换调用语句),并将过程体中所有出现的形式参数在文字上替换成相应的实在参数。这种文字上的替换称为宏扩展(Marcro Expansion)。; (2) 被调用过程中的局部名如果与过程调用的实在参数名发生冲突,则在宏扩展前对被调用过程中的这些局部名重新命名以避免重名冲突。 (3) 为表现实在参数的整体性,必要时在替换前把实在参数用括号括起来。 传名这种参数传递方法因其操作过于复杂现在已很少采用。 不同的参数传递方法得到的结果不同,因此,如何选择参数传递的方法将影响语言的语义,这是编译程序在处理参数传递时应引起重视的问题。;运行时存储器的划分;静态存储分配 ;FORTRAN语言的特点: 不允许过程有递归性; 每个数据名所需的存储空间大小都是常量(即不允许含可变体积的数据,如可变数组); 所有数据名的性质是完全确定的(不允许出现在运行时再动态确定其性质的名字)。这些特点确保整个程序所需数据空间的总量在编译时是完全确定的,从而每个数据名的地址就可静态地进行分配。 ;静态存储分配是一种最简单的存储管理。一般而言,适于静态存储分配的语言必须满足以下条件: (1) 数组的上下界必须是常数; (2) 过程调用不允许???归; (3) 不允许采用动态的数据结构(即在程序运行过程中申请和释放的数据结构)。 ; 在编译过程中,给程序中的变量或数组分配存储单元的一般做法是:为每一个变量(或数组)确定一个有序的整数对;其中,第一个整数用来指示数据区(局部数据区或公用区)的编号,第二个整

文档评论(0)

魏魏 + 关注
官方认证
内容提供者

教师资格证持证人

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

版权声明书
用户编号:5104001331000010
认证主体仪征市联百电子商务服务部
IP属地江苏
领域认证该用户于2023年10月19日上传了教师资格证
统一社会信用代码/组织机构代码
92321081MA26771U5C

1亿VIP精品文档

相关文档