软件开发过程与项目管理综述.ppt

软件开发过程与项目管理综述.ppt

ID:29546740

大小:201.50 KB

页数:44页

时间:2018-12-20

软件开发过程与项目管理综述.ppt_第1页
软件开发过程与项目管理综述.ppt_第2页
软件开发过程与项目管理综述.ppt_第3页
软件开发过程与项目管理综述.ppt_第4页
软件开发过程与项目管理综述.ppt_第5页
资源描述:

《软件开发过程与项目管理综述.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、代码生成授课:胡静编译器的结构出错处理语法分析程序语义分析程序目标代码生成程序词法分析程序中间代码生成程序代码优化程序表格管理7/25/20212编译技术概述代码生成阶段的功能输入:编译器前端生成的中间表示(IR)和相关的符号表信息输出:语义等价的目标程序对代码生成器的要求:语义等价高质量——有效的利用目标机器上的可用资源高效率——代码生成器本身运行效率要高前端代码优化器代码生成器源程序中间代码中间代码目标程序7/25/20213编译技术代码生成器中的优化问题从数学上来讲,为给定源程序生成一个最右的目标程序是不可判定的问

2、题,在代码生成中碰到的很多子问题(比如寄存器分配问题)都具有难以处理的计算复杂度。在实践中,我们需要使用那些能够产生良好但不一定最优的代码的启发性技术。局部最优:指令条数、指令执行顺序、寄存器分配、内存分配设计良好的代码生成器产生的代码比那些简单的代码生成器产生的代码快好几倍。7/25/20214编译技术代码生成器和代码优化器的关系代码优化和代码生成步骤通常称为编译器的后端优化器的功能把一个IR映射成另一个可用于产生高效代码的IR可能在生成目标程序之前对IR做多遍处理。减少中间代码量、计算顺序不论代码是否被优化过,都可以

3、使用代码生成器。7/25/20215编译技术代码生成器的主要任务指令选择:选择适当的目标机指令来实现IR语句。寄存器分配和指派:考虑把哪个值放在哪个寄存器中。指令排序:按照什么顺序来安排指令的执行。7/25/20216编译技术本章内容结构1.代码生成器设计中的问题代码生成器的任务的重要性概述2.目标语言一个简单的机器模型把输入的IR翻译成简单寄存器机器的目标语言指令序列的算法3.目标代码中的地址给出一个编译器需要生成什么样的目标代码,以支持常见源语言中所包含的抽象机制概述静态和栈式数据区分配的实现方法说明如何把IR中的名

4、字转换成为目标代码中的地址7/25/20217编译技术本章内容结构(cont.)4.基本块和流图如何把代码划分为基本块——每个基本块由一组总是一起执行的指令组成。5.基本块的优化针对基本块的一些简单的局部转换方法,从而得到更加高效的代码——已经是代码优化的初步形式例如:寻找公共子表达式,相应的把算术运算替换为更简单的拷贝运算。7/25/20218编译技术本章内容结构(cont.)6.一个简单的代码生成器给出一个简单的代码生成算法依次为每个语句生成代码,并把运算分量尽可能长时间的保存在寄存器中。可以很容易的使用窥孔优化技术

5、进行优化7.窥孔优化讨论窥孔优化技术指令选择和寄存器分配:8.寄存器分配和指派9.通过树重写来选择指令10.表达式的优化代码的生成11.使用动态规划的代码生成7/25/20219编译技术1.代码生成器设计中的问题代码生成器的主要任务:指令选择、寄存器分配和指派以及指令排序代码生成器的设计依赖于中间表示形式、目标语言和运行时刻系统的特定细节,但上述任务在几乎所有的代码生成器设计中都会碰到。代码生成器的标准生成正确的代码。易于实现、测试和维护。7/25/202110编译技术1.1代码生成器的输入代码生成器的输入前端生成的源程

6、序的中间表示形式:三地址表示方式:四元式、三元式、间接三元式等虚拟机表示方式:字节代码和堆栈机代码线性表示方法:后缀表达式等图形表示方法:语法树和DAG图符号表中的信息——确定IR中的名字所指的数据对象的运行时刻地址。认为代码生成器的输入没有词法、语法、静态语义错误。完成了必要的类型检查,类型转换运算已经被插入倒必要的地方。7/25/202111编译技术1.2目标程序实现高质量的机器代码的代码生成器的难度受到目标机器的指令集体系结构的极大影响。常见的目标体系结构:RISC(精简指令集计算机):很多寄存器、三地址指令、简单

7、的寻址方式和一个相对简单的指令集体系结构。CISC(复杂指令集计算机):较少寄存器、两地址指令、多种寻址方式、多种类型的寄存器、可变长度的指令和具有副作用的指令基于堆栈的结构:运算是通过把运算分量压入一个栈,然后再对栈顶的运算分量进行运算而完成的。栈顶元素可以保存在寄存器中。7/25/202112编译技术1.2目标程序(cont.)输出使用绝对地址的及其语言程序的优点是程序可以放在内存中的某个固定位置上,并立即执行。输出可重定位的机器语言程序(目标模块)可以使各个子程序能够被分别编译。但是需要链接和加载。如果目标机没有自

8、动处理重定位,编译器就必须向加载器提供明确的重定位信息,以便把分开编译的程序模块链接起来。本章中,我们输出汇编程序,使用一个非常简单的类RISC计算机作为目标机:只要变量地址可以通过偏移量和存放于符号表中的其他信息计算出来,代码生成器就可以为源程序中的名字生成可重定位地址或绝对地址。RISC上加一下类CISC的寻址方

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

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

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