1

C++コードでループの拡張開発を取得するループを持つ関数があります。また、同じものを取得したい再帰関数があります。

私が必要とする例:

for (i = 0; i <4; i++)
{
      printf ("%d", "example");
}

私が必要とする結果になるはずです

printf ("%d", "example");
printf ("%d", "example");
printf ("%d", "example");
printf ("%d", "example");

これは簡単な例です。しかし、より複雑な関数ではこれを行う必要があります。それが価値があるもののために私は使用しますvisual c++。これにビルドオプションがあるかどうかはわかりません。

4

2 に答える 2

5

GCC を使用してコードをコンパイルしている場合は、-funroll-loopオプションを使用してこのループをループ解除できます。

ドキュメントによると、

  • -funroll-loops
    コンパイル時またはループの開始時に反復回数を決定できるループを展開します。-funroll-loops は、-frerun-cse-after-loop を意味します。このオプションはコードを大きくしますが、実行が速くなる場合とそうでない場合があります。

別の(同様の)オプションがあります:

  • -funroll-all-loops ループ
    に入ったときに反復回数が不明な場合でも、すべてのループを展開します。これにより、通常、プログラムの実行が遅くなります。-funroll-all-loops は、-funroll-loops と同じオプションを意味します。
于 2012-11-14T15:26:30.173 に答える
1

Visual C++ には、ループ展開のための明示的なオプションがありません。ただし、最適化をオンにすると、オプティマイザ ループはヒューリスティックに基づいて展開されます。ループの展開はトレードオフです。パフォーマンスが向上する場合もあれば、そうでない場合もあります。

ここでは、Visual C++ でのループ展開について説明します。

于 2012-11-14T15:37:54.850 に答える