分支错误预测

Lan*_*Pac 0 branch-prediction

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

假设我有这段 C++ 代码

while(memoryAddress = getNextAddress()){

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

}
Run Code Online (Sandbox Code Playgroud)

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

Pas*_*uoq 5

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

\n\n

分支预测器还不够复杂,无法每次都正确,无论您如何尝试欺骗它。如果每次都是正确的,那么分支就总是执行的,它就不会是 \xe2\x80\x9cpredictor\xe2\x80\x9d。

\n\n

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

\n