第十章 代码优化
优化:指对程序进行等价变换,使得从变换后的程序出发,能生成更有效的目标代码。
- 前端优化:在目标代码生成以前,对语法分析后的目标代码进行优化
- 后端优化:在生成目标代码时进行优化,依赖于具体的计算机指令系统
10.1 概述
优化原则:
- 等价原则:经过优化的代码不应改变程序运行的结果
- 有效原则: 有效原则:使优化后所产生的目标代码运行时间较短,占用的存储空间较小
- 合算原则:应尽可能以较低的代价取得较好的优化效果
10.2局部优化
10.2.1 基本块和流图
- 基本块:指程序中一段顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第一条语句,出口是其中最后一条语句
基本块的划分方法
- 流图: 一基本快为节点,通过有向图表示
一个基本块的入口语句是程序的第一条语句,则此结点为首结点
10.2.2 基本快的DAG表示及优化
基本块的DAG
过程叙述起来挺麻烦的,但是实际执行挺简单的:
这里对b重新赋值了,生成附加y的节点的时候,不能用n2,而是要用新生成的,标号更大的n4.因此,在搜索 标号b的时候要从后向前搜索。
DAG图中的数组处理
a[i] 为右值时, 将 a [] j 拆开
当 a[i] 为左值,对 a[i]赋值的时候,将a[i]看作是一个整体。