私が取り組んでいるプロジェクトでは、最適化しようとしている大きなファイルに 4 重にネストされた for ループがあり、-funroll-all-loops を使用したコンパイラーのアンロールの恩恵を受けると思います。ただし、このフラグをコンパイラに追加すると、残りのファイルの他のループが展開され、プログラム全体の実行が遅くなります。ファイル全体ではなく、ファイル内の特定の関数にのみコンパイラ フラグを適用する方法 (おそらく #pragma 経由) はありますか?
前もって感謝します。
GCC関数属性 optimize
を使用して、単一の関数の最適化オプションを設定できます。
void foo(int bar) __attribute__((optimize ("unroll-all-loops")))
{
}
その特定の関数を、使用したい追加オプションでコンパイルできる別の .c ファイルに移動することをお勧めします。これにより、既存の .c ファイルと新しいファイルの間で共有する「foo_private.h」スタイルのヘッダーを作成して、元の .c ファイルで static として宣言された変数を共有できるようにする必要がある場合があります。