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

问题描述 投票:0回答:1

我最近在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++ visual-studio g++
1个回答
2
投票

你可以假设每个编译器作为一个不同的软件来创建机器可运行的代码,从包含代码的文件,这是根据一个特定的标准,如C++.每个这些编译器有其特定的技能特点。一个好的编译器可以优化代码。这也是为什么在调试模式下编译的代码大多比发布编译的代码慢很多的原因。

如果想了解一下,可以试试 https:/godbolt.org 在这里你可以选择编译器,并可以分析输出。

© www.soinside.com 2019 - 2024. All rights reserved.