我知道之前已经问过这样的问题,但我找不到确切的答案。
今天我和我的团队一起写ACM-ICPC比赛。通常我们使用GNU C ++ 4.8.1编译器(比赛时可用)。我们编写了代码,在测试用例10中超出了时间限制。在比赛结束时,剩下不到2分钟,我发送完全相同的提交与Visual C ++ 2013(相同的源文件,不同的语言)它被接受和工作。有超过60个测试用例,我们的代码全部通过了。 我再一次说源代码之间没有差异。 现在我只是感兴趣为什么会这样。
任何人都知道原因是什么?
答案 0 :(得分:1)
在不知道您使用的确切编译器选项的情况下,这个答案可能有点难以回答。通常,编译器会提供许多选项并提供一些默认值,只要用户不覆盖它们就会使用这些值。对于代码优化选项也是如此。两个提到的编译器都能够在被告知时显着提高生成的二进制文件的速度。一个疯狂的猜测是,在我们的例子中,GNU编译器使用的优化设置并没有提高可执行性能,但VC ++设置确实如此。例如,因为在一种情况下没有使用任何标志。另一个疯狂的猜测是,一个编译器正在生成一个调试二进制文件而另一个编译器没有(检查选项-g与GCC切换生成调试符号)。
另一方面,根据您创建的程序,当然可能VC ++在执行优化方面比g ++更好。
如果您有兴趣轻松提升效果,请查看https://gcc.gnu.org/onlinedocs/gnat_ugn/Optimization-Levels.html的高级优化标记或完整故事,https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html的完整列表。
有关比较编译器的更多信息: