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

Lin*_*son 1 c windows gcc

可能重复:
为什么C/C++"Hello World"以千字节为单位?

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

file: test.c
main() {}
Run Code Online (Sandbox Code Playgroud)

我在Windows 7上.我使用MinGW来编译这个文件.

$ gcc test.c
Run Code Online (Sandbox Code Playgroud)

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

$ ls -la a.exe
-rwxr-xr-x 1 Username Administrators 47902 Nov 21 15:57 a.exe
Run Code Online (Sandbox Code Playgroud)

似乎这个完全空洞,毫无价值的C程序编译成一个几乎五十千字节的二进制文件.世界上为什么会发生这种情况?

chi*_*ill 6

运行GCC就好gcc -v test.c.GCC(编译器驱动程序)产生cc1(编译器),as(汇编器)和ld(链接器).看看链接器命令行,你会看到几个文件(像crti.o,crt0.o,crtbegin.o,crtend.o,等)在最终的可执行文件链接.其中一些人可能会从libgcc.a或获取符号libc.a.这就解释了为什么大小不只是几个字节.

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