私は通常の日にプログラミングしているとき、私はすべての支店が取られていない可能性が高いことを確認します。forループの繰り返しは分岐と同じですか?
int retval = do_somting();
if(!retval) { /* Less-than-likely event*/ }
これは分岐の予測を最適化し、CPUの予測ビットを「取らない」ように設定します。しかし、予測子ビットはforループの後に "take"に強制されますか?
// prediction = "likely take"
if(false) { }
// prediction = "probably take"
if(false) { }
// prediction = "probably not take"
if(false) { }
// prediction = "likely not take"
if(false) { }
/* ... thousands of other if(false) that are speedy-fast */
for(int i = 0; i < 5; i++) { }
// prediction = "likely take"?
私はそれは非現実的と非常に小さい最適だけど、ちょっと、より多くのあなたが知っています。
編集: GCCは上記のコードをすべてゴミ箱に入れないとしましょう。また、amd64アーキテクチャについても話しましょう。私はこの質問がどれほど低レベルであるか分かりませんでした。
コンパイラとCPUの最適化のために最適化されるかどうかはわかりません。 – AntonH
あなたの時間を無駄にしないでください。あなたが学ぶほど、少ないことを知ることができます:-) – buffjape
@AntonH明らかに、0のコンパイラの最適化が行われているようです。例えば、GCCがこれを見れば、コードの全てを投げ捨てるでしょう。 –