📄 6.3.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='6.2.3.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.3.0b.htm'"></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>6.3 运行时刻存储分配策略</b></font>
<table>
<tr>
<td>    </td>
<td class="content">
<p>
在图6.6中的三个数据区的组织中各自使用了不同的存储分配策略。这些分配策略是:
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>1.静态分配;
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>2.栈式分配,或称栈式动态分配;
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>
3.堆式分配,或称堆式动态分配。
</p>
</td>
</tr>
</table>
<table><tr><td>    </td>
<td class="content">
<p>下面将分别加以介绍。
</p>
</td>
</tr>
</table>
<br>
<hr size=2 color=red width=90%>
<br>
<font class="title2"><b>6.3.1 静态存储分配</b></font>
<table><tr><td>    </td>
<td class="content">
<P>
静态分配是在编译时刻为每个数据项目确定出在运行时刻的存储空间中的位置。换句话说,在静态分配中,在编译源程序的时候把名字联编于存储空间中。由于这些联编在运行时刻不再发生变化,一个过程无论在哪一次活动中,其中的名字每次均联编到同样的存储位置上。这种性质允许局部名字的值在过程的活动离开时被保留下来。即,当控制返回到一个过程时,该过程的局部名字的值与上次控制离开这个过程时的值是同样的。
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
然而,仅使用静态分配策略有某些限制,主要包括下列几点:
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
1.要求数据目标的大小和它们在内存位置上的约束须在编译时刻就知道;
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
2.限制递归过程的使用;
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
3.数据结构不能动态地来建立,因为没有运行时刻存储分配的机制。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<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='6.2.3.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.3.0b.htm'"></img></td>
</tr>
</table>
</BODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -