2016-11-07 6 views
1

私は最適化のビットをしていると、これがことが判明しています:forループの初期化の条件がループの内部よりも速いのはなぜですか?

for (int x = -1; x < 2; x++) 
{ 
    for (int y = -1; y < 2 ; y++) 
    { 
     if (((x * x)^(y * y)) != 1) 
     { 
      continue; 
     } 
    } 
} 

がこのとして実行するように倍の長以上かかる:

for (int x = -1; x < 2; x++) 
{ 
    for (int y = -1; y < 2 && ((x * x)^(y * y)) == 1; y++) 
    { 

    } 
} 

はここで何が起こっていますか?第二のコードは、最初のに対し、内側のループ場合((x * x)^(y * y)) != 1を終了する;(... -1,1 -1、-1)および原点(0,0)フィールド

+2

どのようにテストしましたか? – Steve

+0

@Steveは、両方のバージョンを10回連続して10回実行しました。デバッグモード – user3488765

+1

タイミングテストは、最適化を有効にしたリリースビルドを使用し、デバッガを使用しないことをお勧めします。 – hatchet

答えて

13

目的は、対角線を避けていますコードは内部ループの1回の繰返しをスキップします。彼らは同じことをしないので、すべての賭けはパフォーマンスを比較してオフです。

+4

おっと、私はばかです、.. – user3488765

関連する問題