这个问题可能很傻,但我还是会问。我从这个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 的值,会发生不好的情况吗?诸如分段错误之类的事情会发生吗?
处理器内部的分支预测器被设计为没有功能上可观察到的影响。
\n\n分支预测器还不够复杂,无法每次都正确,无论您如何尝试欺骗它。如果每次都是正确的,那么分支就总是执行的,它就不会是 \xe2\x80\x9cpredictor\xe2\x80\x9d。
\n\n在继续执行的同时,仍会计算分支的条件,如果结果证明条件不具有预测值,则不会向内存提交任何内容。执行返回到正确的分支。
\n