compiler-construction - Chaitin 的寄存器分配算法:R 寄存器使用了多少种颜色?
问题描述
在关于寄存器分配/柴廷算法的讲座中,似乎我们构建了一个干扰图,然后尝试找到该图的 k 着色,如果我们可以在目标架构中使用 R 寄存器,则 k=R。但是,如果我们溢出一个值,这是否意味着我们需要一个额外的寄存器来在指令中使用它们之前从内存中加载值,因此只能将 k=R-1 值用于 Chaitin 算法?
解决方案
您仍然可以使用 k=R。当您溢出一个值时,您添加存储和检索该值的溢出代码(通常在堆栈上,但存在其他替代方案)。这将用一些仅存在很短时间并且(希望)具有较低程度的新虚拟寄存器替换具有高度干扰的原始虚拟寄存器。您现在可以再次尝试着色,如果仍然失败,则重复溢出过程,直到成功。
推荐阅读
- javascript - 有什么方法可以在不创建无限对象的情况下将“this”传递给另一个类?
- android - 如何使用 ADB 连接智能手表?智能手机通过WiFi与PC连接,而智能手表通过蓝牙与智能手机配对?
- c++ - 调用具有意外结果的默认构造函数
- python - 读取文件有时返回空字符串
- authorize.net - 持卡人身份验证值无效 Authorize.Net AIM
- python - 如何访问已经打开的浏览器窗口?
- javascript - ng-change 未在选择时触发
- python-3.x - 在 Windows 上创建回溯 python 的 virtualenv
- java - Prometheus 动态端口服务发现与 Marathon/Mesos
- c# - 服用 dmg 后如何创建自动 hp 再生脚本?