分支错误预测

时间:2013-10-02 16:02:22

标签: branch-prediction

这个问题可能很愚蠢,但无论如何我都会问 我从this Mysticial的回答中听说过​​分支预测 我想知道是否有可能发生以下情况

假设我有这段C ++代码

while(memoryAddress = getNextAddress()){

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

}

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

1 个答案:

答案 0 :(得分:4)

处理器内的分支预测器被设计为没有功能上可观察到的效果。

分支预测器不够复杂,不能每次都正确,不管你试图欺骗它。如果每次都是正确的,那就是分支总是被执行的方式,它不会是一个“预测者”。

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