gcc のどの 4.x バージョンを使用する必要がありますか?

StackOverflow https://stackoverflow.com/questions/32448

  •  09-06-2019
  •  | 
  •  

質問

私が働いている製品グループは現在、大規模な低レベル C コード ベースに gcc 3.4.6 (古いものであることはわかっています) を使用しており、新しいバージョンにアップグレードしたいと考えています。gcc 4.x をテストしたすべてのハードウェア プラットフォームで、さまざまなバージョンの gcc 4.x をテストすると、パフォーマンス上の利点が確認されました。しかし、私たちは とても C コンパイラのバグが怖いので (歴史的には正当な理由があります)、どのバージョンにアップグレードすべきかについて洞察を持っている人がいるかどうか疑問に思っています。

大規模なコードベースに 4.3.2 を使用している人は、それがうまく機能すると感じていますか?

役に立ちましたか?

解決

gcc の最高の品質管理は Linux カーネルです。GCC は、基本的にすべての主要なオープン ソース C/C++ プログラムに最適なコンパイラーです。リリースされた GCC、特に主要な Linux ディストリビューションに含まれる 4.3.X のような GCC は、かなり優れているはずです。

GCC 4.3 では、新しい CPU での最適化のサポートも強化されています。

他のヒント

プロジェクトを GCC 3 から GCC 4 に移行するとき、動作が前後で同じであることを確認するためにいくつかのテストを実行しました。一連の (できれば自動化された) テストを実行して、正しい動作を確認することはできますか?結局のところ、必要なのは「正しい」動作であり、必ずしも GCC 3 の動作である必要はありません。

特定のバージョンはありませんが、4.X を使用してみてはいかがでしょうか そして 3.4.6 はインストールされていますか?そうすれば、両方のバージョンでコードのコンパイルを継続できるようになり、4 で重大なバグに遭遇した場合でも、終了ポリシーが得られます。

最新のものを使用しますが、 追い詰めて理解する それぞれの警告 -Wall 与える。さらにお楽しみいただくために、さらに多くの警告フラグが用意されています。あなた する 回帰 (およびその他) テストの広範なスイートがあり、それらをすべて実行してチェックします。

GCC (特に C++、C も) はかなり変わりました。コード分​​析と最適化がはるかに優れており、未定義の動作を別の方法で呼び出すことが判明したコードを処理します。したがって、「正常に動作した」ものの、実際には無効な構造の特定の解釈に依存していたコードは、おそらく壊れるでしょう。できればコンパイラーが警告またはエラーを発行できるようにする必要がありますが、そのような幸運が保証されるわけではありません。

OpenMP に興味がある場合は、gcc 4.2 以降に移行する必要があります。約 500 万行のコード ベースで 4.2.2 を使用していますが、問題はありません。

4.3.2 については何も言えませんが、私のラップトップは GCC 4.3.{0,1} (各パッケージのビルド時期に応じて) で構築された Gentoo Linux システムであり、何の問題も見られませんでした。ただし、これは主に標準的なデスクトップでの使用にすぎません。奇妙なコードがあると、走行距離が変わる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top