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

时间:2020-05-12 20:06:59

标签: c++ visual-studio g++

我最近在Windows 10上安装了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文件,并将其粘贴为sizes到我的main.cpp文件夹中。然后,我在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构建的可执行文件却要紧凑得多。为什么会这样?

1 个答案:

答案 0 :(得分:2)

您可以假定每个编译器都是不同的软件,可以从包含根据特定标准(例如, C ++。 这些编译器均具有特定的技能/功能。一个好的编译器可以优化代码。这也是为什么在调试模式下编译的代码要比发行版编译的代码慢得多的原因。

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

相关问题