为什么不同的编译器会产生不同大小的文件?

Why do different compilers produce different sized files?

我最近在 Windows10 上安装了 MinGW,其中包含 C 和 C++ 的软件包。前几天,我决定使用 Visual Studio 1029 的编译器和 g++ 编译一些 C++,看看是否有区别。一个主要的区别是g++生成的文件比VS19生成的文件大四倍多。

这是我所做的:我首先打开 Visual Studio 并创建了一个名为 Test1 的 Visual C++ 控制台应用程序。然后我将以下代码放在 main.cpp:

// Test1.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>

int main()
{
    std::cout << "Hello World!";
}

然后进入构建菜单,将VS19配置为发布模式,构建项目。然后我打开解决方案文件夹,导航到 Release 文件夹并复制 .exe 文件。然后我在其他地方创建了一个文件夹,命名为 sizes(任何名称都可以),并将 .exe 文件粘贴到那里,名称为 VS.exe。然后我返回 Visual Studio 的解决方案文件夹,导航到 Test1 目录,复制 Test1.cpp 文件,并将其作为 main.cpp 粘贴到我的 sizes 文件夹中].然后,我在 sizes 文件夹中打开 PowerShell 并 运行 以下命令:

PS [*****] C:\Users\*****\Documents\C_C++\Sizes> g++ -o mingwgpp.exe main.cpp
PS [*****] C:\Users\*****\Documents\C_C++\Sizes> gci

    Directory: C:\Users\*****\Documents\C_C++\Sizes

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        5/12/2020     15:01                .vs
-a----        5/12/2020     14:13            173 main.cpp
-a----        5/12/2020     15:01          47192 mingwgpp.exe
-a----        5/12/2020     14:14          10752 vs.exe
PS [*****] C:\Users\*****\Documents\C_C++\Sizes> ./vs.exe
Hello World!
PS [*****] C:\Users\*****\Documents\C_C++\Sizes> ./mingwgpp.exe
Hello World!
PS [*****] C:\Users\*****\Documents\C_C++\Sizes>

有趣的是,尽管它们都是从相同的源代码构建的,但通过 Visual Studio 构建的可执行文件要紧凑得多。这是为什么?

您可以将每个编译器假设为不同的软件,以从包含根据特定标准(例如C++。 这些编译器中的每一个都有其特定的 skills/features。一个好的编译器会优化代码。这也是为什么在调试模式下编译的代码大多比发布编译的代码慢得多的原因。

要查看它,请尝试 https://godbolt.org/ 您可以在那里选择编译器并分析输出。