0

这个问题可能很傻,但我还是会问。我从这个Mysticial 的回答
中听说了分支预测 ,我想知道是否有可能发生以下情况

假设我有这段 C++ 代码

while(memoryAddress = getNextAddress()){

  if(haveAccess(memoryAddress))
    // change the value of *memoryAdrress
  else 
    // do something else

}

因此,如果分支预测器在某些情况下错误地预测 if 语句为真,然后程序更改 *memoryAddress 的值,那么可能会发生不好的情况吗?会发生分段错误之类的事情吗?

4

1 回答 1

5

处理器内部的分支预测器被设计为没有功能上可观察的影响。

分支预测器不够复杂,无法每次都正确处理,无论您是否尝试欺骗它。如果每次都是正确的,那就是总是执行分支的方式,它不会是“预测器”。

在继续执行时仍会计算分支的条件,如果条件结果没有预测值,则不会将任何内容提交到内存中。执行回到正确的分支。

于 2013-10-02T16:10:22.340 回答