あなたがいくつかのubuntuバージョンをやっているだけでは、全体的なアーキテクチャの違いがテストに反映されないかもしれないし、同じコンパイラファミリーを持つ同じOSファミリで長い間変化しないかもしれないので、時間。同じディストリビューションの古いバージョンを取得するようなテストの違いが見られる可能性が高い場所では、新しい/最新のコンパイラはapt-getとして直接移植/サポートされません。多分あなたは手作業で作業するようにすることができますが、特にgccは、コードが比較的最近の以前のバージョンまたはそれ以降のバージョンでのみビルドされていて、gccがgccをビルドするのが難しいという点では本当に悪いです。私が最初に目にすることは、厳密にはgccのバージョンの違いによるもので、コンパイラの違いを見ることになります。
より良いテストは、単純な.cファイルをとり、任意のバージョン(そのシステム用に構築されたgccの同じバージョンを使用)と任意のバージョンのubuntu/linuxをビルドします。違いをより迅速に表示する必要があります。
2つの異なるコンパイラでは、合理的なサイズのプロジェクトやナレッジベースのターゲットを絞った小さなコードサンプル(llvm/clangとgccなど)の違いを表示する必要があります。同じコンパイラやコンパイラファミリの異なるバージョンは、定義によっていくらかの違いを示していますが、6.x vs 6.x + 1 gccでは見た目が分かりますが、しばしばそうではありませんがgcc 3.x対gcc 7.xの場合は、テストによってはそこから絞り込むことができます。
コンパイラとコンパイラとの違いは、同じOSやシステムで違いが見られると予想されます。
システムとシステムの違いが同じコンパイラで異なるため、さまざまな理由があります。
そして、上記の組み合わせでも当然の違いが示されます。
大きな問題は、コンパイラやコンパイラの設定やオペレーティングシステムを変更した場合、同じCソースコードが同じように構築されることを期待してはいけないということです。それは、上記のいずれかに基づいて、違いがなくても巨大な違いにもなります。最適化やその他のチューニング設定から非常に簡単に開始し、そこから進みます。
コンパイラの出力は、最適化フラグにも依存します(その中には* many *があります)。 –
異なるOSバージョンで同じコンパイラバージョンをどのように正確に確認しましたか?彼らは異なった構成が可能でしょうか?例えば[それらのうちの1つは '--enable-default-pie'](https://stackoverflow.com/questions/43367427/32-bit-absolute-addresses-no-longer-allowed-in-x86-64-linux/ 46493456#46493456)、あるいは '-fstack-protector'の別のデフォルト? –
どのように正確にasmを比較しましたか? [gcc -O3 -Sを使ってコンパイラの*実際のasm出力を取得しましたか](https://stackoverflow.com/questions/38552116/how-to-remove-noise-from-gcc-clang-assembly-出力)、またはリンクされたバイナリを逆アセンブルしましたか?あるいはバイナリを 'cmp'などと比較しましたか? –