当谈到寄存器分配时,编译文本(例如Cooper编写的Engineering a Compiler)经常提到存储在寄存器中的值需要是“安全的” - 否则它们应该存储在内存中。是什么使一个值不安全的存储在寄存器中?
是什么让一个值不安全的保存在寄存器中?
编辑:从书中语境:
“在内存到内存模式,分配器必须确定哪些值可以安全地在寄存器中,也就是说,它的值是明确保留”
我能找到的信息最多的是 “寄存器升级使用指针值的数据流分析来确定何时可以安全地将整个循环嵌套保存在寄存器中,并重写代码,以便该值保存在新引入的临时变量中。“
为了澄清这个问题:为什么一个指针值不安全地存储在一个寄存器中,并且这是唯一的情况,当一个值无法安全地存储在寄存器中时?
这将有助于提供Cooper在上下文中使用“安全”和/或在本书索引中查找“安全”的引用。 – 2015-02-05 18:45:31
谢谢,我现在编辑了这个问题。 – mijiturka 2015-02-05 18:56:08
我不确定第一个报价,但第二个报价是关于别名分析的 - 当编译器可以证明通过指针加载的值在循环中不会改变时,所以不需要在每次迭代时加载。 – 2015-02-05 18:57:55