2012-04-22 33 views
2

Eclipse CDTとGNU GCCコンパイラに関する簡単な質問があります。GNU GCCコンパイラの最適化とデバッグ

アプリケーションは

  • デバッグモード、すなわち、最適化=なし(-O0)、デバッグ=最大(-g3)、
  • 最適化モードでコンパイルされたアプリケーションに対して、すなわち、最適化=でコンパイルされ最大(-O3)、デバッグ=なしパフォーマンスの違いは別に

が、それはこれらの2モードでコンパイルされたアプリケーションは、正確同じ結果を生成することを保証されていますか?

私はアプリケーションをエンドユーザーにリリースしようとしています。アプリケーションはサーバーベースであり、いくつかのマルチキャストデータフィードを処理します。誰でもコンパイルモードをエンドユーザーに向けて最終リリースするために選択すべきアドバイスを提供できますか?

ありがとうございました。

+1

に何かを行うコードを生成することができます。これはhttp://goo.gl/2OlIZに役立ちます。 –

答えて

6

コードが完全に標準に準拠している場合、プログラムで同じ結果が得られることが保証されています。実際には最適化されていないビルドで動作するが、最適化されたときには破損する可能性がある「未定義の動作」を持つコードを書く方法はたくさんあります。例えば

、私が持っているとします

struct A 
{ 
    int i; 
}; 

struct B 
{ 
    int i; 
}; 

int main() 
{ 
    A a; 
    a.i = 10; 
    B* b = reinterpret_cast<B*>(&a); 
    std::cout << b->i << std::endl; 
    return 0; 
} 

これはほぼ確実に10を出力しますが、コンパイラは、合法的にあなたは間違いなく最適化されたビルドを配布する必要があるため、strict aliasing rules

+0

さらに、O3でコンパイルすると、コンパイル時間が長くなる傾向があります。アプリケーションを開発している間はそれほど気にしません。 – ther

関連する問題