编译原理课件-(9).ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《编译原理课件-(9).ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课件
- 资源描述:
-
1、 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系第9章 运行时的存储组织与管理 (翻译程序必须分配目标程序运行时所需的存储空间,这些空间包括:用户定义的各种类型的变量和常数所需的存储单元;作为保留中间结果和参数传递用的临时工作单元;调用过程或函数时所需的连接单元,返回地址以及组织输入输出所需要的缓冲区。本章介绍有关运行时的存储组织和管理问题。) 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系9.1 数据区和属性字9.2 基本数据类型的存储分配9.3 数组的存储分配9.4 记录结构的存储分配9.5 参数传递方式及其实现9.6 栈式存储分配方法9.7 堆式存储分配方
2、法9.8 临时工作单元的存储分配9.9 小结 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系9.1 数据区和属性字例:PASCAL主程序中所说明的变量运行时所需要的存储单元以及主程序运行时所需要的临时工作单元一起构成了一个数据区。数据区数据区数据区是指一片相连的存储单元。 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系 在编译时,任何变量运行时存储单元都可由一对偶(数据区编号,位移)(数据区编号,位移)表示。其中,数据区编号数据区编号是分配给数据区的唯一编号;位移位移是指该存储单元相对于该数据区起址的距离(或单元数)。例如:对于编号为10的数据区 它的第1个存储
3、单元可表示为(10,0) 第2个存储单元可表示为(10,1) 第i个存储单元可表示为(10,i-1) 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系 程序中出现的简单变量和常量数组,由于它们所需的存储单元数在编译时就可以确定,所以在编译时就可以给它们分配存储单元,这种在编译阶段进行的存储分配工作称为静态存储分配静态存储分配,由静态存储分配产生的数据区称为静态数据区静态数据区。在整个运行过程中,这种数据区是固定不变的。 在运行阶段分配的数据区统称为动态数据区动态数据区。在运行时,一个动态数据区不是固定不变的,随着相应程序单位的调用和返回,它也会随之建立和撤销数据区。 2008年年
4、3月月湖北大学数计学院计科系湖北大学数计学院计科系问题问题:C语言程序引用sizeof函数时,该函数的计算是在编译该程序时完成的,还是在运行该程序时完成的?解答:在C语言中,sizeof函数的计算是在编译时进行的,因为每个类型的大小是确定的,不会随程序的运行而发生变化,所以完全可以在编译时计算出来。 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系begin procedure A begin procedure B begin end; procedure C begin end; end; procedure D begin end; end; 若主程序和每个过程都有自己的数
5、据区,那么将所能引用的数据区的起址按照它们建立的先后顺序排列起来就构成一个DISPLAY表。例:当执行过程C时,DISPLAY表为主程序的数据区起址过程A的数据区起址过程C的数据区起址 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系属性字 程序中变量的属性常常不能在编译阶段全部确定出来。为此编译阶段在给变量分配存储地址的同时,还为它分配一个属性字属性字,用以记录该变量在运行时所确定的属性。 例如动态数组,在运行时,一旦知道了存储空间属性,就调用getarea分配存储空间,并把所分配的存储空间的起址存放在相应的属性字中,以后总是通过这个属性字去访问相应的数组元素的地址。 2008
6、年年3月月湖北大学数计学院计科系湖北大学数计学院计科系9.2 基本数据类型的存储分配基本数据类型:整型、实型、布尔型和指示器型。整型变量:通常占用数据区中的一个单元,其值按机器内部的标准整数形式存储。实型变量:通常占用一个字。布尔型变量:占用一个字,常用零表示“false”值,用非零表示“true”值。指示器型变量:通常占用一个单元。在某些情况下,也把指示器表示成两个相邻单元,一个是其属性字,指明它的类型,另一个单元包含它所真正指向的值。 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系9.3 数组的存储分配单块存储方式 单块存储方式单块存储方式就是把数据区中的一片相连单元分配给
7、数组的元素,数组的所有元素则按次序连续地存储在这片数据区中。元素的排列次序通常为两种:按行的次序按行的次序和按列的次序按列的次序。两种存储方式:单块存储、多块存储 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系 对array A1.m , 1.n of integer所说明的数组,如果以按行的次序存储数组元素的值,则任一数组元素Ai , j在数据区中的地址可由下式求得:address(Ai , j)=address(A1,1)+(i-1)*n+(j-1)address(Ai , j)=address(A1,1)-n-1+(i*n+j) 2008年年3月月湖北大学数计学院计科系湖
8、北大学数计学院计科系 对array A1.m , 1.n of integer所说明的数组,如果以按行的次序存储数组元素的值,则任一数组元素Ai , j在数据区中的地址可由下式求得:address(Ai , j)=address(A1,1)+(i-1)*n+(j-1)address(Ai , j)=address(A1,1)-n-1+(i*n+j)注注:上式中的第一部分是一常数,仅需计算一次。 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系 设A是下面的说明语句定义的一个n维数组: array Al1.u1 , l2.u2 , . , ln.un of integer 假设di
9、=ui-li+1 , i=1,2,n,即di为第i对界偶的界差,亦即第i维中不同下标值的个数,在按行的次序存放方式的前提下,数组元素Ai1,i2,.,in的地址为: address(Al1,l2,.,ln)+(i1-l1)*d2*d3*dn +(i2-l2)*d3*d4*dn + +(in-1-l n-1)*dn +(in-ln) 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系经整理后,得 address(Ai1,i2,.,in)=Conspart+Varpart其中,Conspart= address(Al1,l2,.,ln) -(l1*d2+l2)*d3+l3)*d4+ln
10、-1)*dn+ln) Varpart=(i1*d2+i2)*d3+in-1)*dn+inBegin Varpart:=1 ; j:=1 ; while jn do begin Varpart:=Varpart*dj+1+ij+1 ; j:=j+1; endendVarpart 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系信息向量与数组分配程序数组的信息向量:属性字l1u1d1l2u2d2lnundnnConsparttypeBaseloc 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系数组分配程序数组分配程序: begin i:=1 ; Size:=1 ; C
11、onspart:=0; while i n do begin di:=ui-li+1 ; Size:=Size*di ; Conspart:=Conspart*di+li ; 把li , ui , di填入信息向量中; i:=i+1 end 调用getarea,按Size分配数据区; Baseloc:=该数据区起址; Conspart:=Baseloc-Conspart ; 把n , Conspart , type和Baseloc填入信息向量中 end. 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系多块存储方式 多块存储方式多块存储方式是对每一行都分配一个单块数据区,每行的元
12、素按递增次序存放在这块数据区中。此外,还设一个指示器表,用以指示这些单块数据区的开始位置。 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系9.4 记录结构的存储分配记录结构记录结构是由不同类型的数据组合起来的一种结构。例如,记载学生信息(名字、学号、年龄)的卡片就可以写成如下的记录形式: record name:char-string20; number:integer; age:integer; end存储分配方式: 将其分量依次连续存储在一个数据区中。 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系9.5 参数传递方式及其实现 一个过程或子程序一经定义,就可
13、以被调用。调用与被调用者之间的信息交流是通过全局量或经由参数传递参数传递的方式进行。 参数传递方式: 换名换名、传值传值、传地址传地址、传结果传结果以及数组名用做参数和过程名用做参数。 2008年年3月月湖北大学数计学院计科系湖北大学数计学院计科系换名:用过程体的代码直接替换过程调用语句,其中的形参被替换为相应的实参。传值:过程调用时,将实参的值传递给形参。形参值的改变不会引起实参的变化。传地址:过程调用时,将实参的地址传递给形参。形参值的改变会引起实参的变化。传结果:过程调用时,形参用两个存储单元分别存放实参的值和地址。调用完毕,将形参的值按存储的地址返回给实参。形参形参:过程定义语句中的参
展开阅读全文