📄 9.1.htm
字号:
<html>
<head>
<title>编译原理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link type="text/css" rel="stylesheet" href="../css/specification.css">
</head>
<BODY>
<table align=right width=300>
<tr>
<td>
<img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.7.0.htm'" ></img></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.1.1.htm'" ></img></td>
</tr>
</table>
<br><br>
<center><font class="title1">第九章 代码优化</font></center><br>
<table>
<tr>
<td>    </td>
<td class="content">
<p>
最理想的情况是,编译器产生的目标代码和手写的一样好。这个目标只能在有限的情况下达到,而且相当困难。不过,由简单的编译算法产生的代码是可以改进为运行得更快一些,或占较少的空间,或两者兼有。这种改进是通过程序变换获得,称做<font class="definition3">最优化</font>,这个词有些不恰当,因为很难保证得到的代码是最优的,因而习惯用<font class="definition3">优化</font>一词。实施代码改进变换的编译器叫做<font class="definition3">优化编译器</font>。
</p>
<p>
本章强调的是独立于机器的优化,即改进目标代码而不用考虑目标机器任何性质的程序变换。依赖于机器的优化,例如寄存器分配和特殊机器指令序列的运用,已在第八章讨论过了。
<p>
如果我们能识别出程序中经常执行的部分,并使得这些部分尽可能效率高,那么便能以最小的代价获得最大的利益。流行的说法是程序执行的90%时间消耗在10%的代码上。虽然实际比例可能有变化,但通常程序运行的大部分时间消耗在一小部分程序上。根据有代表性的输入数据精确地画出程序运行时的轮廓可以识别出程序中频繁执行的区域,不幸的是,编译器不能受益于这样的典型输入数据,它必须靠自己对程序的热点在哪儿作出最好的猜测。
<p>
在实践中,程序的内循环是重点要改进的地方。在强调控制结构的语言里,循环是显式出现在程序的语法中的,如当语句和循环语句。通常,程序流图中的循环由控制流分析过程识别,这是本章讨论的重点之一。
<p>
数据流分析是收集程序中变量使用方式的信息的过程。在程序的不同点收集的这种信息可以用一组简单的方程联系起来。我们提出用数据流分析收集信息和在优化中有效地使用这些信息的一些算法,还考虑象过程和指针这样的语言结构对优化的影响。
<p>
本章的最后四节安排的是一些更高级的素材,它们包括和控制流分析有关的图论知识及这些知识在数据流分析中的应用。本章在优化代码调试技术的讨论中结束。本章强调的是用于一般语言的优化技术。
</tr>
</table>
<br>
<p> </p>
<table align=right width=300>
<tr>
<td>
<img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.7.0.htm'" ></img></td>
<td>
<img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='9.1.1.htm'" ></img></td>
</tr>
</table>
</BODY>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -