3

何億回も実行される可能性がある次の単純なコードがあります。

for (int i = 0; i < 8; i++)
    if (((p[i].X >= x) && (p[i].X <= x + d))
        &&((p[i].Y >= y) && (p[i].Y <= y + d))
        &&((p[i].Z >= z) && (p[i].Z <= z + d)))
      return 1;

Visual C++ 2010 コンパイラのオプティマイザはこのループを展開しますか?それとも手動で展開した方がよいでしょうか? 他の同様の質問を見てきましたが、特定の結果は見られません。私

4

1 に答える 1

1

本当の問題は、アンロールから何が得られるかということです。

アンロールif i >= 8 stopすると、「アンロール」ごとに 1 つのブランチ ( ) が削られます。

ループ本体にはすでに 6 つの分岐が含まれています ( if* 1、||* 2、&&* 3); それを展開することで得られることはたくさんありますか?

コードがどのように最適化されているかを見るのは興味深いかもしれません。しかし、展開が主な焦点であるべきかどうかはよくわかりません。複雑な条件がどのように処理されるかの方が心配です!

于 2013-03-07T10:43:32.660 に答える