2

Eclipse CDT と GNU GCC コンパイラーについて簡単な質問があります。

アプリケーションはでコンパイルされます

  • デバッグ モード、つまり、最適化 = なし (-O0)、デバッグ = 最大 (-g3)、対でコンパイルされたアプリケーション
  • 最適化モード、つまり、最適化 = 最大 (-O3)、デバッグ = なし。

パフォーマンスの違いは別として、これら 2 つのモードでコンパイルされたアプリケーションがまったく同じ結果を生成することが保証されていますか?

アプリケーションをエンド ユーザーにリリースしようとしています。アプリケーションはサーバー ベースで、複数のマルチキャスト データ フィードを処理します。最終リリースでエンドユーザーにどのコンパイルモードを選択する必要があるかについて、誰かアドバイスをいただけますか。

ありがとう。

4

1 に答える 1

7

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

たとえば、私が持っているとします:

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 が出力されますが、厳密なエイリアシング ルールにより、コンパイラは別の処理を行うコードを正当に生成する可能性があります。

于 2012-04-22T05:27:09.740 に答える