⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 6.3.2_3b.htm

📁 建立《编译原理网络课程》的目的不仅使学生掌握构造编译程序的原理和技术
💻 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='6.3.2_3.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.3.3.htm'"></img></td>
</tr>
</table>
<br><br>



<br><br>
<center><img src="images/6_13.gif"></center>
<p align=center>图6.13 对于动态分配的数组的存取</p>



<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
图6.13表示出了处理可变长数据的普遍策略,在其中的过程p有三个局部数组A ,B和C。这三个数组的存储空间不是p的活动记录的一部分;只有指向每个数组的开始位置的指针在活动记录中出现。这些指针的有关地址在编译时刻是已知的,因此,目标代码可以通过指针访问数组元素。 
</td></tr></table>


<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
图6.13中还画出了过程p所调用的过程q。q的活动记录从p的数组以后开始。而q的可变长数组紧随q的活动记录之后。 
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
对于栈中数据的访问是通过两个指针top和top-sp实现的。第一个指针标志着实际的栈顶;它指出下一个活动记录的开始位置。第二个指针用于寻找局部数据。为了与图 6.12保持一致,假设top-sp指出的是机器状态域的末端。在图6.13中的top-sp指的是q 的活动记录中的机器状态域的末端。在这个域内有一个控制链连着top-sp的前一次的值,即当控制在调用者p的活动记录中时top-sp的值。 
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
过程返回时重置top和top-sp的代码可以通过利用活动记录中各域的长度在编译时刻生成。当q返回时,top的新值是top-sp减去q的活动记录中机器状态域的长度和参数域的长度。这个长度在编译时刻是已知的。调整好top的值以后,新的top-sp之值可从q的控制链抄得。 
</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='6.3.2_3.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.3.3.htm'"></img></td>
</tr>
</table>

</BODY>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -