当我使用gcc和eclipse cdt编译代码时,为什么可执行文件中存在大小差异

时间:2012-09-11 17:23:50

标签: c gcc eclipse-cdt

当我用gcc(使用终端)和eclipse cdt编译代码时,可执行文件的大小有所不同。 gcc 8kb和eclispse 27 kb 。为什么会发生? eclipse是不是使用了预先安装的相同gcc编译器?该程序非常简单,但它是否会为更大的代码增加显着的大小增量并降低程序性能?

2 个答案:

答案 0 :(得分:1)

是的,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选项可能会导致不同的大小。

答案 1 :(得分:0)

请注意,Eclipse CDT有两个名为“Debug”和“Release”的构建配置。默认情况下,它会构建“Debug”,由于优化程度较低并且包含调试信息,因此会导致更大的可执行文件大小。您可以通过传递gcc -O0和-g标志来重现这一点。

“Release”构建可能会生成与命令行相当的可执行文件。请注意,“Release”构建可能会传递一些改变可执行文件大小的标志(例如,它可以启用更深入的优化)。

您可以在构建控制台视图和生成的make文件中找到CDT传递给GCC的命令行标志。

注意,顾名思义,可执行文件的“Debug”版本将用于调试,不应将其分发给用户。通常,它可能明显较慢并且可能提供一些不适合用户眼睛的调试输出。另一方面,调试“Release”构建可能是一项艰巨的工作,因为它可能会优化您希望在调试器,重新洗牌代码行中观察到的一些代码,并且无法将源代码链接到程序执行。