【问题标题】:Difference between Microsoft compiler and GNU compiler, in terms of output executable file sizeMicrosoft 编译器和 GNU 编译器在输出可执行文件大小方面的区别
【发布时间】:2011-12-20 17:05:07
【问题描述】:

假设我有以下程序:

#include <stdio.h>
int main()
{
    printf("This is a sample C program.\n");
    return 0;
}

如果我在 Windows 7 32 位机器上使用 Microsoft 编译器 (cl.exe /O1 sample.c) 编译它,那么它会输出一个 44 KB 的可执行文件。

如果我在 CentOS 64 位机器上使用 GNU 编译器 (gcc sample.c) 编译它,那么它会输出一个 6 KB 的可执行文件。

一般来说,为什么这个小程序的文件大小会有这么大的差异呢?为什么 Windows 44 KB 只是打印一行并退出?

【问题讨论】:

标签: c compiler-construction executable exe elf


【解决方案1】:

如果您将 /MD 开关与 cl.exe 一起使用,它将动态链接到 msvcrt(Microsoft C 运行时库)并使用 msvcrt.dll(您将获得可比较的 6KB 大小的可执行文件),否则代码来自 C 库的静态链接到您的可执行文件,从而增加了可执行文件的大小。

CentOS 上的 gcc 编译器默认设置为动态链接 C 库。

【讨论】:

    【解决方案2】:

    除了上面提供的链接之外,我觉得this 也将帮助您了解我们使用 gcc 编译时会发生什么!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-12
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多