0

当我使用 gcc(使用终端)和 eclipse cdt 编译代码时,可执行文件的大小有所不同。gcc 8kb 和 eclispse 27 kb。为什么会这样?eclipse 不是使用预装的 gcc 编译器吗?该程序非常简单,但是对于较大的代码会显着增加大小并影响程序性能吗?

4

2 回答 2

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

于 2012-09-11T17:32:42.500 回答
1

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

“发布”版本很可能会生成与您从命令行获得的大小相当的可执行文件。请注意,“发布”版本可能会传递一些改变可执行文件大小的标志(例如,它可以启用更深层次的优化)。

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

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

于 2012-09-11T18:12:12.197 回答