Microsoft 编译器和 GNU 编译器在输出可执行文件大小方面的差异

发布于 2024-12-22 04:14:49 字数 410 浏览 2 评论 0原文

假设我有以下程序:

#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 位的可执行文件知识库。

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

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

Suppose I have the following program:

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

If I compile it with the Microsoft compiler (cl.exe /O1 sample.c) on a Windows 7 32-bit machine, then it outputs an executable file that is 44 KB.

If I compile it with the GNU compiler (gcc sample.c) on a CentOS 64-bit machine, then it outputs an executable file that is 6 KB.

Generally speaking, why is there such a big difference in file size for this small program? Why does it take Windows 44 KB just to print a line and exit?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑕疵 2024-12-29 04:14:49

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

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

If you use the /MD switch with cl.exe, it will dynamically link against msvcrt (the Microsoft C runtime library) and use the msvcrt.dll (and you will get a comparable executable size of 6KB), otherwise the code from the C library is statically linked into your executable increasing the size of the executable.

Your gcc compiler on CentOS is setup to dynamically link against the C library by default.

套路撩心 2024-12-29 04:14:49

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

Apart from the links provided above, I feel this will also help you to understand on what happens when we compile using gcc!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文