3

さまざまな C / C++ コンパイラには#pragma、最適化を制御する があります。

例えば:

コードウォリアー

#pragma optimization_level 0
void func_no_opt()
{
    // Some Work - not optimized
}

#pragma optimization_level 3
void func_full_opt()
{
    // Some Work - optimized
}

MSVC

#pragma optimize("g", off)
void func_no_opt()
{
    // Some Work - not optimized
}

#pragma optimize("g", on)
void func_full_opt()
{
    // Some Work - optimized
}

#pragma optimize("", on)
void func_default_opt()
{
    // Some Work - default optimizations
}

純粋にパフォーマンス上の理由から、他の方法では最適化されていないデバッグ ビルドを含め、すべてのビルドで最適化する必要がある関数がいくつかあります。

GCC (具体的には 4.1.1) でこれらの他のコンパイラと同様のことを行う方法はありますか? 残念ながら、ターゲット プラットフォーム (専用ハードウェア) では GCC 4.4 がサポートされていないため、optimize 属性を使用できません__attribute__((optimize(...)))

また、このターゲット プラットフォームのツールチェーンには、自動一括ビルド ツールがあります。そのため、関数を別のファイルに分割して最適化パラメーターを変更することもできません。これは、プロジェクト内のファイルを自動的に組み合わせてコンパイルとリンクの速度を上げることができるためです。分割方法を実行するには、これらの関数だけの別のライブラリを作成し、それをリンクする必要があります。これは、特にこれを達成するためのより簡単な方法がある場合は、価値があるよりもかなり苦痛になる可能性があります.

4

2 に答える 2

2

GCC 4.4 以降では、http://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html#Function-Specific-Option-Pragmas で詳しく説明されているように、最適化プラグマを使用できます

#pragma GCC push_options
#pragma GCC optimize ("-O0")
int foo() {
  return bar;
}
#pragma GCC pop_options
于 2013-07-08T11:29:05.490 に答える