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

时间:2015-03-19 17:01:08

标签: visual-c++ gcc mingw compiler-optimization

当我使用类似的优化设置在GCC(使用MinGW)和MSVC(使用Visual Studio)中编译大型项目(例如,比特币)时,GCC二进制为6 mb,MSVC二进制为4 mb。 / p>

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

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

3 个答案:

答案 0 :(得分:0)

根据这个关于减少可执行文件大小的wxwidgets页面,已知Visual C ++可以生成更小,更快的可执行文件,至少在Windows上。

  
      
  1. 在Windows上使用Microsoft Visual C ++而不是gcc(Cygwin或Mingw)。   它确实生成更小,更快的可执行文件。
  2.   

答案 1 :(得分:0)

小一点不一定更快。我最新的编译广泛使用了SIMD指令,这些指令可以为一行代码提供多组指令,例如一些用于AVX SIMD,一些用于SSE SIMD,一些用于SSE SISD。然后可以有大量的循环展开(以维持管道流程),具有大量重复的指令序列。

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

答案 2 :(得分:0)

有可能只使用-o2,mingw可能会产生比MSVC更慢的二进制文件。我没有经过测试,也不知道。但是我确实知道-march = native启用,在我自己的基准测试中(http://plflib.org/colony.htm#benchmarks)mingw优于MSVC(具有适当的目标优化)约20%。 我想,主要原因是对于单个CPU目标的更好定制,而不是MSVC的更多散射方法。然而,GCC的代码可能更好。

然而,在其他基准测试中,MSVC可能会显示性能提升。我自己的结果绝不是决定性的,但它们是指示性的。

最后我会注意到,是的,MSVC确实会生成较小的二进制文件 - 但要注意你的#include。在GCC / libstdc ++中包含iostream拖拽代码为Ton,而在MSVC中它拖得很少。正如其他人所说,更小!=必然更快。