第10章目标程序运行时的组织讲解.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文档。上传文档
查看更多
第10章 目标程序运行时的存储组织; 从逻辑上看,在代码生成前,编译程序必须进行目标程序运行环境的配置和数据空间的分配。 数据空间应包括: 用户定义的各种类型的数据对象(变量和常数)所需的存储空间; 作为保留中间结果和传递参数的临时工作单元; 调用过程时所需的连接单元; 组织输入/输出所需的缓冲区。 目标代码所占用空间的大小在编译时能确定。有些数据对象所占用的空间也能在编译时确定,其地址可以编译进目标代码中。而有些数据对象具有可变体积和待分配性质,无法在编译时确定存储空间的位置。 ; 因此运行时的存储区常常划分成:目标区、静态数据区、栈区和堆区,如图10.1 。;所谓数据空间的分配,本质上看,是将程序中的每个名字与一个存储位置关联起来,该存储位置用以容纳名字的值。 编译程序分配目标程序运行时的数据空间的基本依据是程序语言设计时对程序运行中存储空间的使用和管理办法的规定。 在程序设计语言语义学中,使用术语environment表示将一个名字映射到一个存储位置的函数,术语state表示存储位置到值的映射,如图10.2所示。;编译程序分配目标程序运行时的数据空间的基本依据是程序语言设计时对程序运行中存储空间的使用和管理办法的规定。 决定存储管理复杂程度的因素--源语言本身,比如源语言允许的数据类型有多少?语言中允许的数据项是静态确定还是动态确定?程序结构有什么特点,是段结构还是分程序结构?过程定义是否允许嵌套?等等。 源语言的结构特点、源语言的数据类型、源语言中决定名字作用域的规则等因素影响存储空间的管理和组织的复杂程度,决定数据空间分配的基本策略。 ;10.1 数据空间的三种不同使用方法和管理方法;10.1.1 静态存储分配;10.1.2 动态存储分配;10.1.2.1 栈式动态存储分配;10.1.2.2 堆式动态存储分配;堆式的动态存储分配策略:;堆式的动态存储分配策略:;堆式动态储分配的实现通常有如下两种途径:;占用;2)变长块管理 ;变长块管理通常有三种不同的分配策略: 首次满足法(时间优先); 最优满足法(空间优先); 最差满足法(时间优先)。 上述三种分配策略各有所长。 ;10.2 栈式存储分配的实现 ;① 临时工作单元:比如计算表达式过程中需存放中间结果用的临时值单元。 ② 局部变量:一个过程的局部变量。 ③ 机器状态信息:保存该过程执行前关于机器状态的信息,诸如程序计数器、寄存器的值,这些值都需要在控制从该过程返回时给予恢复。 ④ 存取链:用以存取非局部变量,这些变量存放于其它过程的活动记录中。并不是所有语言需要该信息。 ⑤ 控制链:指向调用该过程的那个过程的活动记录,这也不是所有语言都需要的。 ⑥ 实参:也称形式单元,由调用过程向该被调过程提供实参的值(或地址)。当然在实际编译程序中,也常常使用机器寄存器传递实参。 ⑦ 返回地址:保存该被调过程返回后的地址。 ;10.2.1 简单的栈式分配的实现;TOP? ;TOP?; 10.2.2 嵌套过程语言的栈式实现;(1) program sort(input, output); //sort的过程头 (2)  var a: array [0..10] of integer; (3)  x: integer; (4)  procedure readarray; //sort内嵌套定义的readarray的过程头 (5)   var i: integer; (6)   begin…a…end{readarray}; //readarray的过程体 (7)  procedure exchange(i,j: integer);         //sort内嵌套定义的exchange的过程头 (8)   begin (9)    x∶=a[i]; a[i]∶=a[j]; a[j]∶=x; //exchange的过程体 (10)   end{exchange}; (11)  procedure quicksort(m,n: integer);         //sort内嵌套定义的quicksort的过程头 (12)   var k,v: integer; (13)   function partition(y,z:integer):integer;         //quicksort内嵌套定义的partition的函数头 (14)    var i.j:integer; (15)    begin …a… //partition的函数体 (16)     …v… (17)     …exchange(i,j);… (18)     end{partition}; (19)

文档评论(0)

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

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

1亿VIP精品文档

相关文档