Visual c++ GCC二进制文件和MSVC二进制文件之间的区别?

Visual c++ GCC二进制文件和MSVC二进制文件之间的区别?,visual-c++,gcc,mingw,compiler-optimization,Visual C++,Gcc,Mingw,Compiler Optimization,当我使用类似的优化设置在GCC(使用MinGW)和MSVC(使用visualstudio)中编译一个大型项目(例如比特币)时,GCC二进制文件是6mb,MSVC二进制文件是4mb 现在我想知道,这是否意味着MSVC可以产生更好的二进制文件(我的意思是更好,因为更小+更快)?或者这不意味着什么,它只是符号信息或与性能无关的东西吗 我期望有很多评论:只是对它进行基准测试。但是我对差异的原因更感兴趣,而不是精确的大小/性能差异本身。 < P>根据这个关于减少可执行大小的页面,VisualC++被认为可

当我使用类似的优化设置在GCC(使用MinGW)和MSVC(使用visualstudio)中编译一个大型项目(例如比特币)时,GCC二进制文件是6mb,MSVC二进制文件是4mb

现在我想知道,这是否意味着MSVC可以产生更好的二进制文件(我的意思是更好,因为更小+更快)?或者这不意味着什么,它只是符号信息或与性能无关的东西吗

我期望有很多评论:只是对它进行基准测试。但是我对差异的原因更感兴趣,而不是精确的大小/性能差异本身。

< P>根据这个关于减少可执行大小的页面,VisualC++被认为可以产生更小、更快的可执行文件,至少在Windows上。 在Windows上使用微软Visual C++代替GCC(CygWin或MINW)。 它确实生成更小更快的可执行文件
越小不一定越快。我的最新编译广泛使用了SIMD指令,一行代码可以有多个指令集,如AVX SIMD指令集、SSE SIMD指令集和SSE SISD指令集。然后,可能会出现大量重复指令序列的循环展开(以维持管道流)


有些人可能会通过Eclipse在Android上执行相同的过程,其中编译参数APP_ABI:=all会为运行时自动选择的arm64-v8a、armeabi、armeabi-v7a、mips、mips64、x86和x86-64生成代码。

仅使用-o2时,mingw可能会生成比MSVC慢的二进制文件。我还没有测试过,也不知道。然而,我知道启用-march=native时,在我自己的基准测试中()mingw的性能比MSVC(在适当的目标优化下)高出大约20%。 我想,主要原因是,与MSVC更分散的方法相比,针对单个CPU目标的定制更好。然而,GCC的代码生成可能会更好

然而,在其他基准上,MSVC可能会显示出性能改进。我自己的结果并不是决定性的,但它们是指示性的


最后,我要指出的是,MSVC通常会生成较小的二进制文件,但请注意您包含的内容。在GCC/libstdc++中包含iostream会拖累大量的代码,而在MSVC中它只拖累很少的代码。正如其他人所说,更小!=必须更快。

随着CPU缓存大小的不断增加,允许更积极的内联和循环展开优化,比较毫位并不是衡量成功的标准。正确记录您的问题,至少发布编译命令行,这样我们就可以看到您使用了哪些选项。@HansPassant结果二进制文件中33%的差异远远超过了毫位。我只是想知道GCC生成的汇编代码的质量是否很差,而不是它们的性能是否相同。另请参见OpenUserX03的答案,这不仅仅是我的想象。@Muis:Hans仍然认为您需要发布编译器设置是正确的。当你认为它们具有可比性时,你可能错过了一些东西。另外,运行库是静态链接的还是使用DLL的?是否有更多的源代码?因为似乎没有多少人意识到这一点。