目标程序运行时的存储组织概论.pptx

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 目标程序运行时的存储组织; 从逻辑上看,在代码生成前,编译程序必须进行目标程序运行环境的配置和数据空间的分配。 数据空间应包括: 用户定义的各种类型的数据对象(变量和常数)所 需的存储空间; 作为保留中间结果和传递参数的临时工作单元; 调用过程时所需的连接单元; 组织输入/输出所需的缓冲区。 目标代码所占用空间的大小在编译时能确定。有些数据对象所占用的空间也能在编译时确定,其地址可以编译进目标代码中。而有些数据对象具有??变体积和待分配性质,无法在编译时确定存储空间的位置。 ; 因此运行时的存储区常常划分成:目标代码区、静态数据区、栈区和堆区,如图10.1 。;所谓数据空间的分配,本质上看,是将程序中的每个名字与一个存储位置关联起来,该存储位置用以保存名字的值。 编译程序分配目标程序运行时的数据空间的基本依据是程序语言设计时对程序运行中存储空间的使用和管理办法的规定。;决定存储管理复杂程度的因素--源语言本身,比如源语言允许的数据类型有多少?语言中允许的数据项是静态确定还是动态确定?程序结构有什么特点,是段结构还是分程序结构?过程定义是否允许嵌套?等等。 源语言的结构特点、源语言的数据类型、源语言中决定名字作用域的规则等因素影响存储空间的管理和组织的复杂程度,决定数据空间分配的基本策略。 ;10.1 数据空间的三种不同使用方法和管理方法;10.1.1 静态存储分配;10.1.2 动态存储分配;10.1.2.1 栈式动态存储分配;10.1. 2.2 堆式动态存储分配;堆式的动态存储分配策略:;堆式的动态存储分配策略:;堆式动态储分配的实现通常有如下两种途径:;占用;2)变长块管理 ;变长块管理通常有三种不同的分配策略: 首次满足法(时间优先); 最优满足法(空间优先); 最差满足法(时间优先)。 上述三种分配策略各有所长。 ;10.2 栈式存储分配的实现 ;① 临时工作单元:比如计算表达式过程中需存放中间结果用的临时值单元。 ② 局部变量:一个过程的局部变量。 ③ 机器状态信息:保存该过程执行前关于机器状态的信息,诸如程序计数器、寄存器的值,这些值都需要在控制从该过程返回时给予恢复。 ④ 存取链:用以存取非局部变量,这些变量存放于其它过程的活动记录中。并不是所有语言需要该信息。 ⑤ 控制链:指向调用该过程的那个过程的活动记录。 ⑥ 实参:也称形式单元,由调用过程向该被调过程提供实参的值(或地址)。当然在实际编译程序中,也常常使用机器寄存器传递实参。 ⑦ 返回地址:保存该被调过程返回后的地址。 ;10.2.1 简单的栈式分配的实现;这种情况下,采用栈式动态分配策略,即,运行时,每当进入一个过程,则为该过程分配一段存储区,当一个过程工作完毕返回时,它所占用的存储区可释放。程序运行时的存储空间(栈)中在某一时刻可能会包含某个过程的几个活动记录(某个过程递归调用的情况);另外,同样的一个存储位置,在不同运行时刻可能分配给不同的数据对象。 例如图10.7的程序结构中,若主程序调用了过程Q,Q又调用了R,在R进入运行后的存储结构如图10.8(a)所示。 若主程序调用了过程Q,Q递归调用自己,在Q过程第二次进入运行后的存储结构如图10.8(b)所示。;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的

文档评论(0)

helen886 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档