0

この質問はばかげているかもしれませんが、とにかく尋ねます。このMysticial の回答
から分岐予測について聞いた ことがあります。次のことが起こる可能性があるかどうかを知りたいです。

このC++コードがあるとしましょう

while(memoryAddress = getNextAddress()){

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

}

したがって、場合によっては if ステートメントが true であると分岐予測子が誤って予測し、プログラムが *memoryAddress の値を変更すると、そこから悪いことが起こる可能性がありますか? セグメンテーション違反のようなことは起こりえますか?

4

1 に答える 1

5

プロセッサ内の分岐予測子は、機能的に観察可能な影響がないように設計されています。

分岐予測子は、あなたのようなだましの試みに関係なく、毎回正しく取得できるほど洗練されていません。毎回正しい場合、それは常に分岐が実行される方法であり、「予測子」にはなりません。

分岐の条件は、実行が継続している間も計算されます。条件が予測された値を持たないことが判明した場合、メモリには何もコミットされません。実行は正しいブランチに戻ります。

于 2013-10-02T16:10:22.340 に答える