版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、运行时存储组织及管理方案概述编译器的应用模型编译器的应用模型出出错错处处理理语法分析程序语法分析程序语义分析程序语义分析程序目标代码生成程序目标代码生成程序词法分析程序词法分析程序中间代码生成程序中间代码生成程序代码优化程序代码优化程序表表格格管管理理编译的前端编译的前端Front End编译的后端编译的后端Back End2/18/20222运行时的存储组织及管理运行时的存储组织及管理 概述概述 存储组织存储组织 运行时的存储分配策略运行时的存储分配策略 静态存储分配静态存储分配 动态存储分配动态存储分配 对非局部名字的访问对非局部名字的访问 参数传递参数传递2/18/20223运行时的存储
2、组织及管理运行时的存储组织及管理 计算环境 运行时的环境 计算 目标代码当词法分析扫描得到标识符,并将它填入符号表的过程中需要给识别出来的标识符分配内存空间。源程序由一组过程按某种规那么组成。过程的一次执行称作一次活动。在过程的语句序列执行之前,过程中访问的对象构成此过程的运行环境,由运行支持程序组织好。编译程序根据如何组织运行环境而生成目标代码。映射源程序2/18/20224运行时环境的作用运行时环境的作用 目标程序运行时所需存储空间的组织与管理以及源目标程序运行时所需存储空间的组织与管理以及源程序中变量存储空间的分配。程序中变量存储空间的分配。2/18/20225有关源程序中的一些问题有关
3、源程序中的一些问题 问题的提出:如何问题的提出:如何构造运行程序的策略和方法构造运行程序的策略和方法 过程过程 活动树活动树 控制栈控制栈 说明的作用域说明的作用域 名字的绑定名字的绑定 构造运行程序和源程序有关的一些问题构造运行程序和源程序有关的一些问题2/18/20226过程过程 源程序由一组过程组成,不同的程序设计语言,由源程序由一组过程组成,不同的程序设计语言,由过程构成源程序的方法不同。过程构成源程序的方法不同。 构成源程序的两个过程行文,要么是嵌套的,要么构成源程序的两个过程行文,要么是嵌套的,要么是不相交的。是不相交的。2/18/20227program sort(input,
4、output);var a:array0.10 of integer;procedure readarry;var i: integer;beginfor i:=1 to 9 do read(ai)end;function partition(y,z:integer):integer;var i,j,x,v : integer;begin end;procedure quicksort(m,n:integer)var i:integer;beginif(nm) then begini:=partition(m,n);quicksort(m,i-1);quicksort(i+1,n)endend
5、begina0 := -9999;a10:=9999;readarray;quicksort(1,9)end2/18/20228活动树活动树程序执行期间的控制流:程序执行期间的控制流: 程序执行的控制是连续的:在任何一步,控制都处于程序的某一点程序执行的控制是连续的:在任何一步,控制都处于程序的某一点过程的每一次执行都是从过程体的开头过程的每一次执行都是从过程体的开头 开始,并最终把控制返回到紧接着开始,并最终把控制返回到紧接着该过程被调用点的后面。该过程被调用点的后面。过程的一次活动过程的一次活动: 过程体的每一次执行。过程体的每一次执行。过程过程p的一次活动的的一次活动的:在该过程体的执行
6、中的第一步和最后一在该过程体的执行中的第一步和最后一步之间的一序列步骤的步之间的一序列步骤的,其中包括执行过程,其中包括执行过程p所调用的过程所调用的过程的执行时间,以及这些过程所调用的过程的的执行时间,以及这些过程所调用的过程的,如此等等。,如此等等。一个过程是递归的,如果同一过程的一次新的活动可以在前面活动结束一个过程是递归的,如果同一过程的一次新的活动可以在前面活动结束以前开始。以前开始。2/18/20229活动树活动树 为什么过程的活动可以用树形结构描述?为什么过程的活动可以用树形结构描述? 过程活动的特点:过程活动的特点: 每当控制流从过程每当控制流从过程p的活动进入到过程的活动进入
7、到过程q的活动中后,的活动中后,它将返回到过程它将返回到过程p的同一次活动中。的同一次活动中。 也就是说,如果也就是说,如果a和和b是两个过程活动,那么它们的生是两个过程活动,那么它们的生存期要么是不重叠的,要么是嵌套的。存期要么是不重叠的,要么是嵌套的。 在树形结构中,节点间的关系就反映了过程之间的在树形结构中,节点间的关系就反映了过程之间的关系:关系: 父子关系:嵌套父子关系:嵌套 兄弟关系:先后兄弟关系:先后2/18/202210活动树活动树 用一颗树来描绘控制进入和离开活动的途径。这祥用一颗树来描绘控制进入和离开活动的途径。这祥的树称作活动树。的树称作活动树。 每个节点代表过程的一个活
8、动每个节点代表过程的一个活动 根节点代表主程序的活动根节点代表主程序的活动 当且仅当控制流从活动当且仅当控制流从活动a进入活动进入活动b时,节点时,节点a是是b的父的父节点节点 当且仅当当且仅当a的生存期先于的生存期先于b的生存期时,的生存期时,a节点处于节点处于b结结点的左边点的左边 一个结点代表一个唯一的活动,一个结点代表一个唯一的活动, 且每一个活动只有且每一个活动只有一个结点表示,当控制进入某一个活动时,可以直一个结点表示,当控制进入某一个活动时,可以直接说,控制在这个结点上。接说,控制在这个结点上。2/18/202211program sort(input, output);var
9、a:array0.10 of integer;procedure readarry;var i: integer;beginfor i:=1 to 9 do read(ai)end;function partition(y,z:integer):integer;var i,j,x,v : integer;begin end;procedure quicksort(m,n:integer)var i:integer;beginif(nm) then begini:=partition(m,n);quicksort(m,i-1);quicksort(i+1,n)endendbegina0 := -
10、9999;a10:=9999;readarray;quicksort(1,9)endsrq(1,9)p(1,9)q(1,3)p(1,3)q(1,0)q(2,3)p(2,3)q(2,1)q(3,3)q(5,9)2/18/202212控制栈控制栈程序的控制流对应于从活动树根节点开始的深度优先遍历。从程序的控制流对应于从活动树根节点开始的深度优先遍历。从左至右左至右活动树表示了完整的程序控制的先后顺序。在真正运行过程中,活动树表示了完整的程序控制的先后顺序。在真正运行过程中,活动树并不是真实存在的数据结构。活动树并不是真实存在的数据结构。在程序运行过程中,我们只需要保存那些活泼着的过程。在程序运行过
11、程中,我们只需要保存那些活泼着的过程。控制栈控制栈控制栈的根本思想:控制栈的根本思想:当一个活动开始执行时,把代表这个活动的结点推进栈;当这当一个活动开始执行时,把代表这个活动的结点推进栈;当这个活动结束时,把代表这个活动的结点从栈中弹出。个活动结束时,把代表这个活动的结点从栈中弹出。控制栈只能表示活动树的一局部控制栈只能表示活动树的一局部活动树只是逻辑上存在的活动树只是逻辑上存在的类似类似于语法分析树于语法分析树2/18/202213栈和活动树的变化栈和活动树的变化ssrS rq(1,9)S q(1.9)p(1,9)S q(1.9) p(1,9)q(1,3)S q(1.9) q(1,3)p(
12、1,3)S q(1.9) q(1,3) p(1,3)q(1,0)S q(1.9) q(1,3) q(1,0)q(2,3)S q(1.9) q(1,3) q(2,3)2/18/202214控制栈控制栈 控制栈中的活动都是活泼的,当前控制进入的活动控制栈中的活动都是活泼的,当前控制进入的活动在栈顶,从栈顶活动到栈底活动的活动序列是从活在栈顶,从栈顶活动到栈底活动的活动序列是从活动树上当前结点通向根的路径上的结点序列。动树上当前结点通向根的路径上的结点序列。 从栈底活动到栈顶活动的活动序列表示了活动的生从栈底活动到栈顶活动的活动序列表示了活动的生存期的嵌套关系。存期的嵌套关系。 结论:扩充控制栈可用
13、来实现如结论:扩充控制栈可用来实现如Pascal语言的栈式语言的栈式存储分配。控制栈中存储活动记录存储分配。控制栈中存储活动记录2/18/202215声明的作用域声明的作用域声明语句是把名字与名字的属性信息绑定在一起的语法结构。声明语句是把名字与名字的属性信息绑定在一起的语法结构。说明的作用域是一个说明起作用的范围说明的作用域是一个说明起作用的范围(源程序行文源程序行文)。一个名字在源程序行文中可能有几处说明,语言的作用域规那一个名字在源程序行文中可能有几处说明,语言的作用域规那么规定了在语句序列中引用的一个名字是在何处说明的名字。么规定了在语句序列中引用的一个名字是在何处说明的名字。编译时,
14、处理说明时,把名字及其属性信息填写进符号表;处理引用编译时,处理说明时,把名字及其属性信息填写进符号表;处理引用时,查找这个名字的属性信息,符号表管理程序根据语言的作用域规时,查找这个名字的属性信息,符号表管理程序根据语言的作用域规那么,返回其作用域中绑定的属性信息。那么,返回其作用域中绑定的属性信息。2/18/202216名字与存储的绑定名字与存储的绑定 名字与存储单元的绑定是指把源程序中的名字与存储单元的绑定是指把源程序中的映射到映射到的过程。的过程。把名字映射到一个存储单元上;把名字映射到一个存储单元上;把存储单把存储单元映射到那里所存放的值上。元映射到那里所存放的值上。 或者说,环境把
15、一个名字映射为一个左值,而状态或者说,环境把一个名字映射为一个左值,而状态把一个左值映射为一个右值。把一个左值映射为一个右值。2/18/202217名字与存储的绑定名字与存储的绑定名字名字存储单元存储单元值值存储分配存储分配程序运行程序运行环境环境状态状态l-valuer-value2/18/202218静态概念静态概念 动态对应动态对应过程定义过程定义 过程活动过程活动名字说明名字说明 名字的绑定名字的绑定说明的作用域说明的作用域 活动的生存期活动的生存期2/18/202219存储组织存储组织 运行时刻内存的划分:假定编译器从操作系统得到运行时刻内存的划分:假定编译器从操作系统得到一块存储区
16、,运行时的存储空间要划分成块一块存储区,运行时的存储空间要划分成块: 生成的目标代码生成的目标代码; 数据对象数据对象; 记录过程活动的控制栈对应的数据结构记录过程活动的控制栈对应的数据结构2/18/202220目标代码目标代码静态数据静态数据栈栈堆堆1. 编译后知道目标代码的大小。编译后知道目标代码的大小。放放入静态确定的区域中入静态确定的区域中2. 某些数据对象的长度也可以在编译某些数据对象的长度也可以在编译时知道,也可以放在静态区域中。主时知道,也可以放在静态区域中。主程序中的数据:程序中的数据:c,FORTRAN3. 栈栈控制栈:控制栈:Pascal,c4. 堆堆开销比栈大开销比栈大(
17、分配和释放方式分配和释放方式):Pascal,c2/18/202221活动记录活动记录 把过程的一个活动所需要的信息组织成一块连续的把过程的一个活动所需要的信息组织成一块连续的存储单元,称为活动记录。存储单元,称为活动记录。 一个活动所需要的信息的每个数据项有相同的生存一个活动所需要的信息的每个数据项有相同的生存期,因此,组织成一个活动记录是很自然的。期,因此,组织成一个活动记录是很自然的。 对于对于pascal语言来说,运行过程中,当调用一个过程语言来说,运行过程中,当调用一个过程时,在栈顶构筑它的活动记录;当这个过程的活动时,在栈顶构筑它的活动记录;当这个过程的活动执行完后,把它从栈顶弹出
18、。执行完后,把它从栈顶弹出。2/18/202222活动记录活动记录控制链控制链:指向调用过程活动的活动记指向调用过程活动的活动记录。录。访问链:指向本活动要访问的非局访问链:指向本活动要访问的非局部数据所在的活动记录。部数据所在的活动记录。保存机器状态:调用过程活动在调用保存机器状态:调用过程活动在调用点的机器状态,包括计数器,各种存点的机器状态,包括计数器,各种存放器的值。放器的值。局部数据:过程中定义的局部量。局部数据:过程中定义的局部量。临时变量:编译产生。临时变量:编译产生。返回值返回值实在参数实在参数控制链控制链访问链访问链保存机器状态保存机器状态局部数据局部数据临时变量临时变量2/
19、18/202223编译时刻的局部数据的设计编译时刻的局部数据的设计PROCEDURE sub(x,y:real); VAR i ,j:integer; a:ARRAY1.5 OF real; e, f : real; BEGINf :=e+i*j; END;名字名字 形形 类型类型 偏移量偏移量 x 形形 real 1 y 形形 real 2 i int 20 j int 21 a array 22 e real 27 f real 28符号表符号表2/18/202224中间代码中间代码 编译结束,知道每个过程的活动记录的长度,将其编译结束,知道每个过程的活动记录的长度,将其填写到相应的过程表
20、中,运行时,调用哪个过程,填写到相应的过程表中,运行时,调用哪个过程,就在运行栈顶,推进那个过程的活动记录栈箭头就在运行栈顶,推进那个过程的活动记录栈箭头加上活动记录长度。加上活动记录长度。 f :=e+i*j; *ijt1 +et1t2 := t2f2/18/202225运行时刻存储分配策略运行时刻存储分配策略 分配策略是:分配策略是: 静态分配;静态分配; 栈式分配,或称栈式动态分配;栈式分配,或称栈式动态分配; 堆式分配,或称堆式动态分配。堆式分配,或称堆式动态分配。 采用哪种分配策略是由源语言的语义决定的。采用哪种分配策略是由源语言的语义决定的。2/18/202226静态存储分配静态存
21、储分配 静态存储分配:在静态存储分配:在由由实现对存储实现对存储空间的管理和为源程序中的变量分配存储的方法。空间的管理和为源程序中的变量分配存储的方法。 静态存储分配的条件静态存储分配的条件 如果在编译时能够确定源程序中变量在运行时的数据如果在编译时能够确定源程序中变量在运行时的数据空间大小,且运行时不改变,那么就可以采用静态存空间大小,且运行时不改变,那么就可以采用静态存储分配方法。储分配方法。 允许局部名字的值在过程停止活动后仍然保持,也允许局部名字的值在过程停止活动后仍然保持,也就是当控制再次进入程序时,局部名字的值同控制就是当控制再次进入程序时,局部名字的值同控制上次离开时一样。上次离
22、开时一样。还能用控制栈进行还能用控制栈进行控制吗?控制吗?2/18/202227静态存储分配的局限静态存储分配的局限 在编译时刻知道数据目标的大小和它们在内存位置在编译时刻知道数据目标的大小和它们在内存位置上的约束;上的约束; 不能递归调用过程一个过程的两个活动的生存期不能递归调用过程一个过程的两个活动的生存期不相交不相交,一个过程的所有活动可以使用同一个活动记一个过程的所有活动可以使用同一个活动记录;录; 不能动态地建立数据结构。不能动态地建立数据结构。2/18/202228静态存储分配策略静态存储分配策略CNSUME目标代码目标代码PRDUCE目标代码目标代码Char *50 buf int next char cChar *80 buffer int nextCnsume活动记录活动记录prduce活动记录活动记录目标代码目标代码静态数据静态数据2/18/202229静态存储分配策略静态存储分配策略 由于每个变量所需空间的大小在编译时,因此可以由于每个变量所需空间的大小在编译时,因此可以用简单的方法给变量分配目标地址。用简单的方法给变量分配目标地址。 开辟一数据区。首地址在加载时定开辟一数据区。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 航空航天采购合同协议书
- 沈阳理工大学《C++程序设计》2022-2023学年期末试卷
- 2024居间合同样本
- 2024试用期内是否要签合同
- 2024中外合资经营企业合同制造厂
- 2024家装装修的合同范本
- 糖尿病蛋白质的摄入
- 4人合伙人协议书(2篇)
- 租赁协议书(2篇)
- 关于银行实习日记模板汇编六篇
- GB/T 15329.1-2003橡胶软管及软管组合件织物增强液压型第1部分:油基流体用
- 2023年全国中学生英语能力竞赛(NEPCS)高二试题-含答案-高考
- 《直线与圆锥曲线的综合问题》示范公开课教学课件【高中数学北师大】
- 人体衰老和抗衰老研究 课件
- 新城吾悦广场商业封顶仪式策划方案
- 《故都的秋》《荷塘月色》《我与地坛(节选)》群文阅读 导学案 统编版高中语文必修上册
- 小学数学北师大三年级上册五周长围篱笆
- 25吨吊车参数表75734
- 中职学生学习困难课件
- 外研版五年级上册说课标说教材课件
- 被巡察单位组织人事工作汇报集合5篇
评论
0/150
提交评论