📄 8.4.0.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.3.2.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.4.0b.htm'"></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>8.4 下次引用信息</b></font>
<table><tr><td>    </td>
<td class="content" width="865">
<P>当我们要把中间代码变换成目标代码时,在一个基本块范围内考虑如何充分利用寄存器是一个重要的问题之一。为了把基本块内还要被引用的变量值尽可能保存在寄存器中,同时把基本块内不再被引用的变量所占用的寄存器及早释放,每当翻译一条三地址语句x:=y op z时,我们需要知道,x,y,z是否还会在基本块内被引用以及用于哪些三地址语句中。为此,我们引入一个术语:下次引用信息,或说下一个引用点。在本节,我们将讨论如何收集基本块中的关于名字的下次引用信息。
<P>一般说来,假定三地址语句i将一个值赋予x,而语句j中的x是一个操作对象(即语句j要引用x的值),并且控制能够经过一个不含有对x的其它赋值的通路从语句j到达语句j,那么,我们称j是三地址语句i的x的下次引用信息,或说语句j引用在i处计算出的x的值。在这里我们仅考虑属于同一个基本块内的引用信息。</P>
<P>我们采用从每一个基本块的出口语句由后向前的扫描方法来确定各有关下次引用信息,我们可以很容易地从一串三地址语句中找到基本块的出口,正如算法8.1所指出的。另外要注意的是,由于过程调用可以带来副作用,因而我们假定每个过程调用都是一个新的基本块的入口。</P>
<P>为了取得每个名字在基本块内的引用信息,从基本块的出口由后向前扫描,对每个名字建立相应的下次引用信息链和活跃变量信息链。由于本书不再介绍活跃变量分析,因而可以采用一种保守的作法,即假定所有的非临时变量在出口处都是活跃的。进而如果产生中间代码的算法允许某些临时变量在基本块外引用,则这些临时变量也都可假定是活跃的。尽管如此,我们在建立下次引用信息链的同时也将提到活跃变量信息链。</P>
</td></tr></table>
<br>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.3.2.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.4.0b.htm'"></img></td>
</tr>
</table>
</BODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -