编译原理(5)——代码优化和目标代码生成

作者:佚名    发布时间:2024-05-13 10:17:47    浏览:

[返回]

何为优化,是代码发生变换后,能够保质保量完成原本的任务,而对使用时间和空间上面进行改进。主要的优化有两大类:中间代码优化(不依赖计算机)和目标代码优化(依赖计算机)

局部优化:在基本块上优化循环优化:对循环代码进行一些操作全局优化:整个程序范围内(略,我没学)

常用优化技术:删除多余运算、合并已知量和复写传播、删除无用赋值、循环优化技术(代码外提、强度削弱、变换循环控制条件)

局部优化:在基本块上优化

入口语句:程序第一句、(有条件或无条件)转移GOTO所到的语句、条件GOTO语句后面一句

基本块:顺序读取程序语句,得到是入口语句之间的程序部分;

不在基本块的语句直接可以删除

简单来说,这个部分是想将基本块作为附带信息标志的节点,创建一个有向无环图(DAG)。

具体的操作看视频很清楚:

https://www.zhihu.com/video/1716850475582984192

程序流图:基本块为节点,按照执行顺序(相邻,转移出口->入口)将基本块用有向边连接。

代码外提:可以只计算一次的表达式外提

循环不变运算:如果每次循环后这个值不改变(为常量),就不用每次都去做。

强度削弱:比如,乘法换加法。



目标代码生成

中间代码输入——>转换为——>特定的机器语言或者汇编语言输出。

转换的函数称为,基本块的代码生成算法。

我们需要考虑的是:如何生成的代码最短最有效率?如何优化这段代码和寄存器的接触,充分利用寄存器以减少对存储单元的访问?答:寄存器分配算法。

基本块代码生成算法https://www.zhihu.com/video/1716850555182235648

搜索

平台注册入口