假设我有以下程序:
#include <stdio.h>
int main()
{
printf("This is a sample C program.\n");
return 0;
}
如果我在 Windows 7 32 位计算机上使用 Microsoft 编译器 (cl.exe/O1 example.c
) 对其进行编译,则会输出一个 44 KB 的可执行文件。
如果我在 CentOS 64 位机器上使用 GNU 编译器 (gcc example.c
) 编译它,那么它会输出一个 6 KB 的可执行文件。
一般来说,为什么这个小程序的文件大小差别这么大?为什么仅打印一行并退出 Windows 就需要 44 KB?
最佳答案
如果您将/MD 开关与 cl.exe 结合使用,它将动态链接到 msvcrt(Microsoft C 运行时库)并使用 msvcrt.dll(您将获得 6KB 的可比可执行文件大小),否则代码C 库中的静态链接到您的可执行文件中,从而增加了可执行文件的大小。
默认情况下,CentOS 上的 gcc 编译器设置为动态链接 C 库。
关于c - Microsoft 编译器和 GNU 编译器在输出可执行文件大小方面的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8579145/