1

私は常に gcc を使用して C/C++ コードをコンパイルしてきましたが、それが唯一のフリー コンパイラではないという事実に気付いたのはつい最近のことです。

これらの他のコンパイラのいくつか、特にclangは多くの見込みを示しているように見えるので、私は切り替えをいじっています。私のコンパイラに対する私の基準は、C99 標準にただちに準拠することと、より一般的になるにつれてより多くの標準に準拠すること、そして無料でオープン ソースであること、コードを可能な限り最適にコンパイルすることです。コンパイルが速いことは私にとってそれほど重要ではありませんが、常にプラスになります。とはいえ、gcc をすぐに超える可能性のあるコンパイラがあれば、学習のために今すぐ切り替える価値があるかどうかを知りたいと思います。

主に C++ コードをコンパイルするために使用するので、これは C よりも優先されます。Linux 用の Linux でビルドするので、優れた CLI は必須です。バイナリが高品質である限り、ある程度の不安定性は気にしません。

4

1 に答える 1

4

すべてのプロジェクト、目的、期待に最適なコンパイラはありません。

  • すべてのプロジェクト (gccまたはのようなコンパイラ プロジェクトを含むllvm) には、わずかに異なる優先順位があります (たとえば、最新の言語標準のサポート、標準の純度とパフォーマンス、コンパイル パフォーマンスとランタイム パフォーマンスなど)。
  • 多くのベンチマークとそれらを比較する方法があります。しかし、多くの場合、1 つのプログラムのコンパイルに勝った場合 (勝利の任意の定義について)、通常は別のプログラムが存在し、別のコンパイラが勝利します (同じ勝利の定義について)。
  • 前のポイントは、異なる最適化オプションを使用する場合、同じコンパイラにも有効です。いくつかの最適化は時々 (できればもっと頻繁に :-) 役立ちますが、時には (他のコードの場合) 実際にパフォーマンスを低下させます。
  • コンパイラのベンチマークも、同じレベルの最適化を使用していないなどの理由で常に批判されています。比較記事の一部の読者は、実際には他の側面がベンチマークされることを常に期待しているためです。これは、各コンパイラが異なるデフォルトの最適化レベルを持ち、異なる最適化レベルで異なる最適化を使用し、同じ最適化が異なるコンパイラで異なる方法で実装され、一部の最適化が一部のコンパイラでのみサポートされているためです。
  • 結果は、プラットフォームや CPU モデルによっても異なる場合があります。
  • gccとはどちらllvmも非常に活発に開発されているため、それらの比較は、公開された時点ですでに時代遅れになっています。

これはすべて、開発者が個人的な (嫌いな) 好みのコンパイラーを投影し、時には炎上戦争につながることにもつながります。したがって、あなたが得ることができる唯一の答えは、「場合による」ということです。

于 2012-06-22T09:00:34.043 に答える