1

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

考虑以下用 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 程序编译成一个大小接近 50 KB的二进制文件。为什么会发生这种情况?

4

1 回答 1

6

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

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

于 2012-11-21T23:14:12.177 回答