Cygwin的GCC编译器和Windows上的MSVC编译器之间是否存在性能问题?

6

大多数人在Linux上使用gcc编译器,在Windows上使用MSVC编译器。我最近在我的Windows机器上安装了Cygwin的GCC编译器并正在使用它。

我只是好奇它们之间是否有性能差异?我的意思是,GCC不能直接安装在Windows上,因此Cygwin包在Windows上创建了一些类似于Linux的环境,然后GCC将使用该环境。那么这样做是否有什么缺点呢?

Linux上的GCC和Windows上使用Cygwin的GCC是否有性能差异?


3
GCC不需要Cygwin。(搜索mingw)。性能差异很大程度上取决于您正在编写什么以及您如何编写它。 - Mat
1
在Windows上有GCC的本地版本。最常见的(也许是唯一的)是mingw。在性能方面,GCC和MSVC之间可能没有太大差异。当然,在Windows上还有其他非常好的C编译器,例如英特尔C编译器。 - David Heffernan
MinGW不适用于POSIX,因此无法使用它们。 - Jeegar Patel
额,MSVC 也不支持 POSIX。POSIX 在这个问题中哪里体现出来了? - David Heffernan
1个回答

4
我只是好奇它们之间是否有任何性能差异?
当然,编译器在某些方面是相互竞争的:
1. 编译速度 2. 内存使用率 3. 生成代码效率 4. 等等。
根据我的经验,前三点都属于MSVC。在Windows上,GCC(特别是Cygwin发行版)的编译速度非常慢,但我想这是可以预料的。GCC是跨平台的,有大约5个中间阶段(从一种树转换到另一种树),具有可插拔的架构和许多其他可能为灵活性牺牲编译速度的功能。我没有足够的数据来了解MSVC的体系结构。内存使用率并不是非常重要,但仍然MSVC做得更好,我没有真正的论据说明为什么会这样,只是看一下任务管理器的值。生成代码效率是一个很大的争议点。在许多情况下,MSVC获胜,但在其他一些情况下,GCC获胜。两者都是旧的编译器,并且已经通过了大量的优化进行改进。GCC输给MSVC的一个重要因素是WPO(整体程序优化)。MSVC已经成熟了很长时间,而AFAIK GCC仍在向成熟迈进(4.X系列越来越好,但尚不能与MSVC相媲美)。
Cygwin的包在Windows上创建了一些类似于Linux的环境,然后gcc将使用它,那么这有没有什么缺点?
实际上并没有。您可以在没有任何Unix仿真环境的情况下使用GCC。MinGW发行版可以独立使用而不需要MSYS。但是,如果您希望以GNU风格编译程序(例如"./configure && make && make install"风格),则仍然需要它。
Linux上的GCC和Windows上使用Cygwin的GCC之间是否有任何性能差异?
是的。GCC在Linux上运行得比Windows快得多,但并不总是GCC本身有问题。在Windows上,进程创建比在Linux上复杂得多(您可以比较WinAPI的CreateProcess和Unix的exec),通常情况下会导致Windows上比Linux上任何程序执行速度更慢。

1
GCC 4.6确实具有整个程序优化功能,它被称为链接时优化,通过-flto标志传递,既可以在编译C或C++源文件时使用,也可以在链接生成的目标文件时使用。 - Basile Starynkevitch
@BasileStarynkevitch 是的,即使在4.6之前他们就已经有了(我不记得第一个具有它的版本)。只是没有MSVC的那么成熟。 - LeleDumbo
@LeleDumbo,第一个版本是针对使用ELF的平台的4.5.0版本,而针对使用PE/COFF或Mach-O的平台则是4.5.1版本。此外,您始终可以制作一个单一的大文件并进行编译(这可能是#include *.c文件最有意义的地方);) - user784668
比较g++和Msvc ++的执行性能并不是一件简单的事情。在适用于支持g++自动向量化的情况下,__restrict几乎总是提供最佳性能。如果没有__restrict,g++的自动向量化性能将受到影响。 - tim18

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接