0

複数のファイルを使用すると、コードがはるかに簡単になることを私は知っています。ただし、「すべてを1つのファイルに詰め込む」間にパフォーマンスの違いがありますか、それともgccのような最新のコンパイラは両方に同じバイナリを作成しますか? パフォーマンスの違いとは、ファイル サイズ、コンパイル時間、および実行時間を意味します。

これは C のみです。

4

3 に答える 3

2

おそらく、変更されたファイルのみを再コンパイルする必要があるため、コンパイル時間は複数のファイルで改善されます (適切な依存関係追跡ビルド システムがあると仮定します)。

やるべきことはまだあるので、リンクにはおそらくもっと時間がかかります。

従来、コンパイラは複数のソース ファイルにわたって最適化を実行できませんでした (関数のインライン化などは注意が必要です)。そのため、結果として得られる実行可能ファイルは異なる可能性があり、潜在的に遅くなります。

于 2013-01-05T10:12:43.727 に答える
2

すべてが単一のファイルにある場合、最適化の機会が増えます。たとえば、 で始まる gcc は、-O2インライン宣言されていなくても、本体が使用可能な場合に一部の関数をインライン化します (さらに多くの関数が でインライン化できます-O3)。そのため、実行時間に違いがあり、場合によってはそれらに気付く機会さえあります。の場合はなおさらで-fwhole-program、外部関数のアウトオブライン バージョンを気にしないことを GCC に伝えますmain()(GCC は、すべての外部関数が静的になったかのように動作します)。

全体的なコンパイル時間は、増加する場合があります (分析するものが増え、すべてのオプティマイザー アルゴリズムが線形であるとは限らないため) または減少する場合があります (同じヘッダーを複数回解析する必要がない場合)。バイナリ サイズは、増加する (インライン化により、実行速度が向上する代わりに) か、減少する可能性があります (可能性は低いですが、インライン化によって呼び出し元のコードが単純化され、コード サイズが減少する場合があります)。

開発と保守を容易にするために、sqlite のアプローチを使用できます。複数のソース ファイルがありますが、コンパイル前に 1 つにまとめられます (「融合」)。

于 2013-01-05T10:16:29.590 に答える
0

一部のテストでは、コンパイルとリンクに時間がかかります。少なくとも私はそうしましたが、別のバイナリを受け取りますが、私のものは他のバイナリの 1 バイト以内でした。

オールインワン ファイルは で実行され.000764 MS 、複数ファイル バージョンは で実行されました。.000769 MS 私は約 5 分でそれをまとめましたが、それは小さなプログラムでした。

したがって、全体的に違いはありません。

于 2013-01-05T10:10:06.163 に答える