2009-05-07 7 views
3

さまざまなC/C++コンパイラでは、最適化を制御するために#pragmaがあります。GCC 4.1.1でファイル内の個々の関数を最適化する方法は何ですか?

たとえば、次のように純粋にパフォーマンス上の理由から

のCodeWarrior

#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はターゲットプラットフォーム(プロプライエタリハードウェア)ではサポートされていないため、最適化属性(__attribute__((optimize(...))))を使用できません。

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

答えて

4

__attribute__((optimize(...)))のように見えるのは、GCCの関数ごとの最適化を制御する唯一の手段です。したがって、GCC 4.1.1では、最適化される関数の別のライブラリを分割することが、あなたの唯一の選択肢です。上向きGCC 4.4で

+0

Ugghhで説明するように、あなたは、最適化のプラグマを使用することができます..私はもっと簡単な方法があるだろう期待していました。私はGCC 4.4 :-( – Adisak

2

は、 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 
+0

をサポートし始めるまで苦労しなければならないと思います。クラスメソッドでは、このオプションは#pragmaがクラス宣言(.hファイル)にある場合にのみ動作します。メソッド定義(.cppファイル)への影響。 – mgruber4

関連する問題