From dc34d9eafd4a9383f41a772e97e5e64199019167 Mon Sep 17 00:00:00 2001 From: Lane0218 Date: Thu, 12 Mar 2026 16:51:39 +0800 Subject: [PATCH] =?UTF-8?q?docs(doc):=20=E8=B0=83=E6=95=B4=20Lab4=20?= =?UTF-8?q?=E7=BA=BF=E6=80=A7=E6=89=AB=E6=8F=8F=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/Lab4-寄存器分配.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Lab4-寄存器分配.md b/doc/Lab4-寄存器分配.md index 3068ee4..40ddec9 100644 --- a/doc/Lab4-寄存器分配.md +++ b/doc/Lab4-寄存器分配.md @@ -63,7 +63,7 @@ Lab4 的目标是在 Lab3 示例基础上,把“固定寄存器 + 栈槽”的 3. 每处理到一个新区间时,先移除已经结束的区间并释放其占用的物理寄存器。 4. 若存在空闲物理寄存器,则直接分配;若没有空闲寄存器,则比较当前区间与 `active` 中已有区间的结束位置,选择 spill 当前区间或 spill 一个结束更晚的旧区间。 5. 对 spill 的虚拟寄存器插入 reload/store 后,需要重新计算受影响区间,再继续后续分配与汇编落地。 - - 说明:线性扫描通常更容易先做出一个可运行版本,在函数数量较多、实现周期较紧的课程环境中也较常见;但如果要把效果做得更好,仍然需要认真处理区间切分、调用点约束、callee/caller-saved 寄存器使用策略等问题。 + - 说明:线性扫描通常更容易先做出一个可运行版本,作为寄存器分配的起点也比较常见;但如果要把效果做得更好,仍然需要认真处理区间切分、调用点约束、callee/caller-saved 寄存器使用策略等问题。 无论采用图着色还是线性扫描,都不应把寄存器分配理解为“把虚拟寄存器简单替换成物理寄存器名字”。真正完整的实现还需要和 spill/reload、栈帧布局、callee-saved 保存恢复以及最终汇编输出联动,否则后端仍然无法支撑完整 SysY 程序。