编译原理课程设计之第七节-运行时环境.ppt

编译原理课程设计之第七节-运行时环境.ppt

ID:52631900

大小:522.50 KB

页数:62页

时间:2020-04-12

编译原理课程设计之第七节-运行时环境.ppt_第1页
编译原理课程设计之第七节-运行时环境.ppt_第2页
编译原理课程设计之第七节-运行时环境.ppt_第3页
编译原理课程设计之第七节-运行时环境.ppt_第4页
编译原理课程设计之第七节-运行时环境.ppt_第5页
资源描述:

《编译原理课程设计之第七节-运行时环境.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、课程内容第一章概论第二章词法分析第三章上下文无关文法及分析第四章自上而下的语法分析第五章自下而上的语法分析第六章语义分析第七章运行时环境第八章代码生成mcy1第7章运行时环境(存储空间)当源程序的目标代码被运行时,在内存中不仅有目标代码,而且还要保存各种信息,如必须为源程序中所出现的一些量(常量、变量及某些数组等)分配运行时的存储空间。即编译器要从操作系统得到一块存储区,用于被编译过的目标程序的运行。mcy2存储分配是在运行阶段进行的,但编译程序在编译阶段要为其设计好存储组织形式,并将这种组织形式通过生成的目标代码

2、体现出来。(举例说明:函数调用分析.txt)目标代码运行时,存储空间的组织称为目标代码的运行时环境。mcy3运行时环境有三个类型:完全静态环境(fullystaticenvironment)、基于栈的环境(stack-basedenvironment),以及完全动态环境(fullydynamicenvironment)。这3种类型的混合形式也是可能的。mcy47.1程序执行时的存储器组织7.2完全静态的运行时环境7.3基于栈的运行时环境7.4动态存储器7.5参数存储机制mcy57.1程序执行时的存储器组织目标代码运

3、行时,操作系统为目标代码的运行分配的存储空间按用途可划分为下面几个部分:mcy6代码区域:目标代码的存储区域,由于代码区在执行之前是固定的,所以在编译时所有目标代码的地址都是可计算的;全程/静态区域:静态数据区用来存放那些具有绝对地址的数据和变量(如静态变量和全程变量);编译器可以确定其所占用存储空间的大小;栈区:在运行时分配存储空间的数据就分配在栈区;编译器知道存在栈中的具体数据大小和存活时间;堆区:供用户动态申请存储空间,编译器不需要知道究竟得从heap中分配多少空间,也不需要知道从heap上分配的空间究竟需要

4、存在多久。由于栈区和堆区的长度会随着目标代码的运行而变化,因此把它们分配在数据区的两端。一般情况下,栈向下长,堆向上长,可以使栈和堆共用一空白存储空间。mcy7在PASCAL,C语言中,通常采用以过程为单位的动态存储分配方案:当一过程(函数)被调用时,就在栈顶为该过程分配所需的数据空间(过程活动记录),当一个过程工作完毕返回时,它在栈顶的数据空间(过程活动记录)也即释放。过程的活动记录(activationrecord,AR)是一段连续的存储区,用于存放过程的一次执行所需要的信息,当调用或激活过程或函数时,必须为被

5、调用过程的活动记录分配空间。活动记录存放的信息至少应包括以下几个部分:mcy8存放主调过程为被调过程提供的实参信息;存放目标程序临时变量的值;存放本次执行中的局部数据用于指向主调过程的活动记录的控制链和返回地址;mcy9b:2a:1该函数调用结束时的返回地址(00401353)主调函数的控制链C语言所调用函数的活动记录示例(函数调用分析中的举例)c:3栈底栈顶mcy10第7章运行时环境7.1程序执行时的存储器组织7.2完全静态的运行时环境7.3基于栈的运行时环境7.4动态存储器7.5参数存储机制mcy117.2完全

6、静态的运行时环境在完全静态环境中,不仅全局变量,所有的变量都是静态分配,即整个程序所需数据空间的总量在编译时是完全确定的,从而每个数据名的地址就可静态地进行分配,适于静态分配的语言,要求满足的条件是:每个数据名所需的存储空间的大小都是常量不允许采用动态的数据结构,即在程序运行过程中申请或释放的数据结构过程不可递归调用mcy12整个程序存储器如下所示:mcy13程序所需的数据空间在程序运行前就可确定,称为_______管理技术。静态存储动态存储栈式存储堆式存储mcy14静态存储分配允许程序出现_______。递归过程

7、可变体积的数据项目静态变量待定性质的名字mcy15第7章运行时环境7.1程序执行时的存储器组织7.2完全静态的运行时环境7.3基于栈的运行时环境7.4动态存储器7.5参数存储机制mcy167.3基于栈的运行时环境7.3.1没有局部过程的基于栈的环境在一个所有过程都是全局的、过程定义不允许嵌套,但允许过程的递归调用的程序设计语言(例如C语言)中,基于栈的动态运行时环境有两个指针:sp:栈顶部(topofstack)指针;对于x86系统来说,它采用sp或esp寄存器存储栈顶部的地址;mcy17fp(framepoint

8、)指向当前活动记录的控制链的指针,对于x86系统,它采用bp或ebp寄存器存储当前活动记录的控制链的地址,其作用如下:1.通过该指针可以访问当前执行函数的局部变量;2.通过该指针可以访问主调程序的活动记录;3.允许在当前的被调函数执行完毕时,用它来恢复主调函数的活动记录。mcy18b:2a:1该函数调用结束时的返回地址(cs:eip)00401353主调函数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。