这个问题可能很愚蠢,但无论如何我都会问 我从this Mysticial的回答中听说过分支预测 我想知道是否有可能发生以下情况
假设我有这段C ++代码
while(memoryAddress = getNextAddress()){
if(haveAccess(memoryAddress))
// change the value of *memoryAdrress
else
// do something else
}
因此,如果分支预测器在某些情况下错误地预测if语句为真,然后程序更改* memoryAddress的值可能会发生错误吗? 分段错误之类的事情会发生吗?
答案 0 :(得分:4)
处理器内的分支预测器被设计为没有功能上可观察到的效果。
分支预测器不够复杂,不能每次都正确,不管你试图欺骗它。如果每次都是正确的,那就是分支总是被执行的方式,它不会是一个“预测者”。
在执行继续时仍然会计算分支的条件,如果条件结果没有预测值,则不会将任何内容提交给内存。执行回到正确的分支。