gcc (端末を使用) と eclipse cdt でコードをコンパイルすると、実行可能ファイルにサイズの違いがあります。gcc 8kb と eclipse 27 kb .なぜそれが起こるのですか? Eclipse は、プリインストールされていたのと同じ gcc コンパイラを使用していませんか? プログラムは非常に単純ですが、コードが大きくなるとサイズが大幅に増加し、プログラムのパフォーマンスが低下しますか?
2 に答える
はい、Eclipse は同じものを使用していgcc
ます。ただし、Eclipse がデバッグ用の情報をバイナリ ファイルに追加する可能性があります。たとえば、Eclipse は、バイナリ内にソース コード全体を含めるオプションを使用してgcc
実行される可能性があります。-g
これにより、実行可能ファイルのサイズに大きな違いが生じる可能性があります。
たとえば、次の簡単なプログラムをコンパイルしてみてください。
#include <stdio.h>
int main() {
int i;
for (i=0; i<10; i++)
printf("Hello, world!");
return 0;
}
試してみてください:
$ gcc -o program program.c
$ gcc -o program_g program.c
$ ls -lh | grep program
-rwxr-xr-x 1 zagorax users 7,8K set 11 19:37 program
-rwxr-xr-x 1 zagorax users 8,4K set 11 19:37 program_g
-rw-r--r-- 1 zagorax users 105 set 11 19:35 program.c
もちろん、gcc
オプションが異なると、サイズが異なる場合があります。
Eclipse CDT には、「Debug」と「Release」という名前の 2 つのビルド構成があることに注意してください。デフォルトでは、最適化が少なく、デバッグ情報が含まれるため、実行可能ファイルのサイズが大きくなる「デバッグ」がビルドされます。これは、gcc -O0 および -g フラグを渡すことで再現できます。
「リリース」ビルドでは、コマンド ラインから得られるものと同等のサイズの実行可能ファイルが生成される可能性があります。「Release」ビルドは、実行可能ファイルのサイズを変更するいくつかのフラグをまだ渡す可能性があることに注意してください (たとえば、より深い最適化を有効にすることができます)。
CDT が GCC に渡すコマンド ライン フラグは、ビルド コンソール ビューと生成された make ファイルにあります。
名前が示すように、実行可能ファイルの「デバッグ」バージョンはデバッグに使用されるため、ユーザーに配布しないでください。原則として、著しく遅くなる可能性があり、ユーザーの目には意図されていないデバッグ出力が提供される場合があります。一方、「リリース」ビルドのデバッグは、デバッガーで観察したいコードを最適化したり、コード行を再シャッフルしたり、ソースコードをプログラム実行にリンクできなかったりする可能性があるため、困難な作業になる可能性があります。