为什么空C程序编译为47902字节?

时间:2012-11-21 23:02:30

标签: c windows gcc

  

可能重复:
  Why is a C/C++ “Hello World” in the kilobytes?

考虑以下用ANSI C编写的程序。

file: test.c
main() {}

我在Windows 7上。我使用MinGW编译此文件。

$ gcc test.c

然后,我想看看这个文件的大小。

$ ls -la a.exe
-rwxr-xr-x 1 Username Administrators 47902 Nov 21 15:57 a.exe

看起来这个完全空的,毫无价值的C程序编译成大约五十千字节的二进制文件。为什么世界会发生这种情况?

1 个答案:

答案 0 :(得分:6)

gcc -v test.c一样运行GCC。 GCC(编译器驱动程序)产生cc1(编译器),as(汇编程序)和ld(链接程序)。查看链接器命令行,您将看到最终可执行文件中链接的多个文件(如crti.ocrt0.ocrtbegin.ocrtend.o等)。其中一些人可能会从libgcc.alibc.a获取符号。这就解释了为什么大小不只是几个字节。

您还可以使用-Wl,-Map=map.txt运行它来生成一个映射文件,该文件将显示每个对象和库中的每个函数或变量,它包含在最终的可执行文件中。