网站大量收购独家精品文档,联系QQ:2885784924

运行时的存储组织和分配.PPTVIP

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

第7章 目标程序运行时的存储组织   存储组织 运行时的分配策略   从逻辑上看,在代码生成前,编译程序必须进行目标程序运行环境的设计和数据空间的分配。一般来讲,假如编译程序从操作系统中得到一块存储区以使目标程序在其上运行,该存储区需容纳生成的目标代码和目标代码运行时的数据空间。   数据空间应包括:用户定义的各种类型的数据对象(变量和常数)所需的存储空间,作为保留中间结果和传递参数的临时工作单元,调用过程时所需的连接单元,以及组织输入/输出所需的缓冲区。目标代码所占用空间的大小,在编译时能确定,有些数据对象所占用的空间也能在编译时确定,其地址可以编译进目标代码中。但有些数据对象具有可变体积和待编译性质,而无法在编译时确定存储空间的位置。   编译程序分配目标程序运行时的数据空间的基本依据是程序语言设计时对程序运行中存储空间的使用和管理办法的规定。   因此,源语言的结构特点、源语言数据类型、源语言中决定名字作用域的规则等因素影响存储空间的管理和组织的复杂程序,决定数据空间分配的基本策略。 术语   静态:如果一个名字的性质通过说明语句或隐或显规则而定义,则称这种性质是“静态”确定的。   动态:如果名字的性质只有在程序运行时才能知道,则称这种性质为“动态”确定的。   可变(动态)数组:若一个数组所需的存储空间的大小在编译时就已知道,则称它为确定数组,否则称为可变(动态)数组。   如像FORTRAN这样的语言, 其程序是段结构的,即由主程序段和若干子程序段组成。各程序段中定义的名字一般是彼此独立的(除公共块和等价语句说明的名字以外),也即各段的数据对象名的作用域在各段中,同一个名字在不同的程序段表示不同的存储单元,不会在不同段间互相引用、赋值。   过程所需的数据空间包括两部分,一部分是生存期在本过程这次活动中的数据对象,如局部变量、参数单元、临时变量等等;另一部分则是用以管理过程活动的记录信息,即当一次过程调用出现时,调用该过程的那个过程的活动即被中断,当前机器的状态信息,诸如程序计数器(返地址)、寄存器的值等,也都必须保留在栈中。   这种情况下通常使用一种称为堆式的动态存储分配方案。假设程序运行时有一个大的存储空间,每当需要时就从这片空间中借用一块,不用时再退还。   Program main;   全局变量的说明;   proc R;   ……   end R;   proc Q;   ……   end Q;   主程序执行语句   end.(main)   语句exchangel(m,n);表示了对过程exchangel的一次调用,其中m,n为实在参数,简称实参。我们所讨论的问题是,为执行 exchangel(m,n),形参i,j应按何种方式同实参m,n相联,换句话说,如何把实在参数传递给相应的形式参数呢?   在一个赋值语句a[i]:=a[j]中,表达式a[j]表示一个值,而a[i]表示一个存储位置,用于存放a[j]的值。通常术语左值(L—value)指 表达式代表的存储,右值(R—value)指该 存储位置中含有的值。“左”和“右”来自赋值语句的“左”端和“右”端。参数传递方法的不同主要基于实在参数是表达一个右值,一个左值,还是实在参数本身的文本。 传地址: 第五章: 编译程序的数据结构和符号表 5.1 分配型数据结构 5.2 查找型数据结构 概述 在编译过程中需要建立并保持一批表格-符号表。 从提高编译程序 的工作效率上考虑,有关的数据结构的设计就显得非常重要。 从使用角度上看可以分为:查找型数据结构和分配型数据结构。 查找型数据结构在编译过程中用于构造不同的信息表,保存源程序中不同实体的属性信息。特点是每个实体的项只创建一次,但可以查询多次,所以查询效率很重要。 分配型数据结构主要用于处理嵌套结构的程序。其特点是分配给实体的内存地址对实体用户是可知的。因此不会对其进行查询操作,但分配和回收的速度和内存的使用效率却是十分重要的。 5.2.1 查找型数据结构 (1)什么是符号表? 在编译过程中,编译程序用于记录源程序中各种名字的特性信息, 所以也称为名字特性表。 名字: 程序名、过程名、函数名、用户定义类型、变量名、符号名字。 特性信息:名字种类、类型、维数、参数个数及目标地址(存储单元地址)等。 (2) 建表和查表的必要性 (符号表在编译过程中的作用) 源程序中变量要先声明,然后才能引用。 用户通过声明语句,声明各种名字,以及给出它们的类型维数等信息,编译程序在出来这些声明语句时,因将声明中的名字以及信息登录到符号表中,同时编译还要给变量分配存储单元,而存储单元地址也必须登录在符号表中。 当编译程序编译到引用所声明的变量时(赋值或引用其值)要进行语法语义

文档评论(0)

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

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

1亿VIP精品文档

相关文档