09运行时存储空间组织.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
专业资料,精品文档!

第九章 运行时存储空间组织 运行时 存储空间组织 编译程序在完成词法、语法和语义分析后,在生成目标代码之前,需要把程序的静态正文和实现这个程序的运行时的活动联系起来,弄清楚将来在代码运行时刻,源代码中的各种变量、常量等用户定义的量是如何存放的,如何去访问它们 在程序的执行过程中,程序中数据的存取是通过与之对应的存储单元来进行的 在程序语言中,程序使用的存储单元都是由标识符来表示的,它们对应的内存地址都是由编译程序在编译时或由其生成的目标程序运行时进行分配 对于编译程序来说存储组织与管理复杂而又十分重要 本章对目标程序运行时的活动和运行环境进行讨论,主要讨论存储组织与管理,包括活动纪录的建立与管理、存储器的组织与存储分配的策略、非局部名称的访问等问题 1 目标程序运行时的活动 1.1 过程的活动 1.2 参数传递 1.1 过程的活动 讨论一个过程的静态源程序和它的目标程序在运行时的活动之间的关系 一个过程的活动指的是该过程的一次执行 关于过程P一个活动的生存期,指的是从执行该过程体第一步操作到最后一步操作之间的操作序列,包括执行P时调用其他过程花费的时间 术语“生存期”指的是在程序执行过程中若干步骤的一个顺序序列 每次控制流从过程P的一个活动进入过程Q的一个活动,最后都放回到过程P的同一个活动 若a和b都是过程的活动,则它们的生存期或者是不重叠的,或者是嵌套的。即:如果控制在退出a之前进入b,那么,必须在退出a之前退出b 一个过程是递归的,如果该过程在没有退出当前的活动时,又开始其新的活动 一个说明在程序里能起作用的范围称为该说明的作用域 1.2 参数传递 调用与被调用(过程)之间的信息往来要么通过全局变量要么经由参数传递 形式参数与实在参数 参数传递的三种方法 传址 call by reference 传值 call by value 传名 换名 call by name a: b中,b代表一个值,而a则表示一个存储地址 参数传递方法之间的主要区别在于实在参数是代表右值、左值或者实在参数的正文本身 传 值 传值调用的实现:调用过程计算实在参数,并把它们的右值放入到形式参数的存储空间中 调用swap(a,b)等价于: ??? ? x: a ?? ? y: b ?? ? temp: x ?? ? x: y ? ?? y: temp a和b的值不变 传 址 定义:把实参的地址传递给相应的形参 在目标代码中,被调用过程中对形式参数的一次引用就成为对传递给被调用过程的指针的一个间接引用 传 名 过程被当作宏对待。过程调用的作用相当于把被调用过程的过程体宏扩展到调用出现的地方 重新命名被调用过程中的局部名字 对于调用swap(i,a[i]),采用传名调用方式可实现如下: ??? temp : i; i := a[i]; //注意此处i值得以改变 a[i] := temp; //此a[i]不是原来的a[i] 当i的值改变时,a[i] 的值也改变。因此,不能一开始就算出实在参数的地址,以后就用这个地址;而是每当被调用过程内引用该形式参数时,就必须重新计算它的地址。而且,必须在定义它的环境中进行计算,即,必须在调用过程中进行计算 实现方法:把实参处理成一个子程序(称为参数子程序),每当过程体中使用到相应形参时就调用该子程序 2 运行时存储器的划分 2.1 运行时存储器的划分 2.2 活动纪录 2.1 运行时存储器的划分 编译程序为了使它编译后得到的目标程序能够运行,要从操作系统中获得一块存储空间 对这块提供运行的空间应该进行划分以便于存放,其中包括生成的目标代码、数据对象和跟踪过程活动的控制栈 目标代码的大小在编译时可以确定,可以放在一个静态区域 某些数据对象的大小在编译时也能确定,也可放在一个静态区域 FORTRAN语言的所有数据对象都可进行静态存储分配 Pascal和C使用栈来管理过程的活动 当发生过程调用时,中断当前活动的执行,激活新被调用过程的活动,并把相关信息入栈 当控制从调用返回时,将所占存储空间出栈,恢复被中断的活动 Pascal和C允许动态分配存储空间给相关数据对象,这样的区域称为堆(heep) 2.2 活动纪录 为了管理过程在一次执行中所需要的信息,使用一个连续的存储块,我们把这样的一个连续存储块称为活动纪录 当前活动纪录一般包括如下内容: 连接数据 返回地址 动态链:指向调用该过程前的最新活动纪录地址的指针。运行时,使运行栈上各数据区按动态建立的次序结成链。链头为栈顶起始位置 静态链:指向静态直接外层最新活动

文档评论(0)

gubeiren_001 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档