我最近在Windows 10上安装了MinGW,并安装了C和C++的软件包。前几天,我决定用Visual Studio 1029的编译器和g++编译一些C++,看看是否有区别。有一个很大的区别,g++产生的文件比VS19产生的文件大了4倍多。
我是这样做的。我首先打开Visual Studio,创建了一个Visual C++ Console Application,名字叫: Test1
. 然后我把下面的代码放在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
. 然后我打开PowerShell中的 sizes
文件夹,并运行以下命令。
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++.每个这些编译器有其特定的技能特点。一个好的编译器可以优化代码。这也是为什么在调试模式下编译的代码大多比发布编译的代码慢很多的原因。
如果想了解一下,可以试试 https:/godbolt.org 在这里你可以选择编译器,并可以分析输出。