- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理ppt第八章
nhkjk 目标程序运行时的存储组织 学习目标: 掌握: 参数传递的几种方式 理解: 静态存储分配、栈式动态存储分配、 堆式动态存储分配的基本思想 目标程序运行时的存储组织 存储分配是在运行阶段进行的; 但编译程序在编译阶段要为其设计好存储组织形式,并将这种组织形式通过生成的目标代码体现出来; 运行阶段,随着目标代码的运行,数据的存储组织形式便得以实现。 目标程序运行时的存储组织要解决的问题: 把静态的源程序与程序运行时的动态活动联系起来,即运行中的程序信息是如何进行存储和访问的。 在程序执行过程中,程序中数据的存取是通过对应的存储单元来进行的 存储组织就是要在编译阶段为源程序中出现的用户定义的变量与常量、临时工作单元、过程或函数调用时需要的连接单元与返回地址等分配其在运行阶段的存储空间 8.1 运行时的存储空间结构 当程序运行时,存储区的内容包括: 目标代码 目标代码的大小在编译时可以静态确定,因此可以把它放在静态确定的区域; 目标代码运行时的数据空间 数据空间包括:用户定义的各种类型的数据对象;临时工作单元;输入/输出缓冲区等 数据空间有三种组织形式:静态数据区、栈区和堆区 运行时的存储空间结构如下: 8.2 运行时的存储空间分配 影响分配策略的因素: 源语言的结构特点 源语言的数据类型 源语言中决定名字作用域的规则 编译器具体实现时,采用如下三种分配策略之一或三种的混合形式。这三种方式是: 静态存储分配 栈式动态存储分配 堆式动态存储分配 8.2.1 静态存储分配 指在编译时对数据对象分配固定的存储位置,运行时始终不变。即一旦存储空间的某个位置分配给了某个数据名,则在目标程序的整个运行过程中,此位置(地址)就属于该数据名。 由静态存储分配产生的数据区称为静态数据区。 静态存储分配适用于不允许递归过程或递归调用,不允许可变体积的数据结构的语言 静态存储分配的特点:简单、易于实现 例:FORTRAN语言,它所有的数据都属于这一类。 8.2.2 动态存储分配 指在运行阶段动态地为源程序中的数据对象分配存储位置 实行动态存储分配的语言的特点: 允许递归过程 允许可变数据结构(可变数组或记录等) 允许用户自由申请和释放空间 这种程序在编译时无法确定运行时所需数据空间的大小,需待程序运行时动态确定 有两种动态存储分配方式:栈式(stack)、堆式(heap)。 8.2.3 栈式动态存储分配 在数据空间中开辟一个栈区,每当调用一个过程时,它所需要的数据空间就分配在栈顶,每当过程工作结束时就释放这部分空间。空间的使用符合先借后还的原则。 特点:先借后还,管理简单,空间使用效率高 栈式动态存储分配适合于PASCAL、C等典型过程式语言。 8.2.4 堆式动态存储分配 在数据空间中开辟一片连续的存储区(通常叫做堆),每当需要时就从这片空间借用一块,不用时再退还。借用与归还未必服从“先借后还”的原则。 堆式动态存储分配适合于用户可以自由申请和归还数据空间的语言,如C++。 特点:适用范围广,容易出现碎片。 如何充分利用空间是个难题。 作为存储分配组织的一个原则,能在编译时完成的存储分配尽量采用静态分配方案,避免目标程序中携带许多用于存储分配的指令,以提高目标代码的效率。 8.3 参数传递 过程(函数)是结构化程序设计的主要手段,同时也是节省程序代码和扩充语言能力的主要途径。 当一个过程调用其他过程时,调用与被调用之间的通信或者通过全局量,或者由参数传递。 掌握编译器使用的参数传递的方法很重要,它们直接影响程序运行的结果。 1. 参数 参数 过程定义中的参数称为形式参数,简称形参。 过程调用中的参数称为实在参数,简称实参。 实参可以是变量、常量或较复杂的表达式,应与相应的形参在性质上相容。 参数传递常用的三种途径: 传值 (call by value),也称值调用 传地址 (call by reference),也称引用调用 传名 (call by name),也称“换名” 2. 传值 将实参的值计算出来,然后把它传给被调过程 传值的实现: 1.在被调过程的数据空间中为每个形参开辟一个形式单元(用以存放相应的实参值)。 2.调用过程计算实参的值,并将其值放在对应的形式单元中。 3.被调用过程执行时,每当访问(引用或赋值)形参时都处理成对形式单元的直接访问。 特点: 对形式参数的任何运算不影响调用过程中的实参的值 3. 传地址 将指向实参存储位置的指针传给被调用过程 传地址的实现: 1.在被调过程的数据空间中为每个形参开辟一个形式单元(用以存放相应实参的地址)。 2.调用过程将实参的地址放在对应的形式单元中。若实参是一个表达式(包括常数),例如a+b或2,先对表达式求值,并将值存入某一位置,然后
您可能关注的文档
- 2001高二物理期中试题.doc
- 第三节化学反应的速率和限度(一).ppt
- 语文S版三年级上册9月份月考试卷.doc
- 上海世博会尚未正式开幕.doc
- 小学语文第六册期末测试卷.doc
- 创新高教自考助学管理模式的对策.doc
- 移动网络山寨版.doc
- 喷漆质量管理制度.doc
- 地球的自转ppt(含小题).ppt
- 幸福2012.ppt
- 重庆市两江新区2025届中考历史模拟试题含解析.doc
- 2025届山西省晋南地区中考生物模拟预测题含解析.doc
- 山东省临沂市沂水县2025届中考历史模试卷含解析.doc
- 浙江省杭州市周浦中学2025届中考生物模拟预测题含解析.doc
- 江苏省盐城射阳县联考2025届中考五模历史试题含解析.doc
- 2025届江苏省南师附中集团达标名校十校联考最后历史试题含解析.doc
- 甘肃泾川县2025届中考历史押题试卷含解析.doc
- 山东省潍坊市寒亭区市级名校2025届中考一模化学试题含解析.doc
- 2025届辽宁省葫芦岛市名校中考历史押题卷含解析.doc
- 2025届四川省师大一中学中考历史对点突破模拟试卷含解析.doc
文档评论(0)