什么是gcc中使用的-o3优化标志

时间:2014-03-18 16:52:23

标签: gcc

有人可以告诉我为什么我们需要将-o3与gcc中的-o联系起来编译c程序这个简单的问题,这有助于提高编译速度或减少编译时花费的时间吗?

感谢!!!

1 个答案:

答案 0 :(得分:1)

它可能会提高生成的代码的性能

原则上,编译通常需要更长,因为这需要(更多)编译器进行更多分析。

对于典型的现代C ++代码,-O2和更高的效果可能非常显着(一个数量级,具体取决于程序的性质)。

手册页中记录了在各种优化级别执行哪些优化:http://linux.die.net/man/1/gcc

请记住,虽然各种优化可能会使潜在的错误显现出来,因为允许编译器利用Undefined Behaviour¹来实现更高效的目标代码。

未定义的行为潜伏在语言标准未准确指定需要发生的位置的地方。这些可能非常微妙。

所以我建议使用高于-O2的任何东西,除非你有严格的质量控制措施来防止这种隐藏的未定义行为(想想valgrind / purify,静态分析工具和(压力)测试)。


¹关于优化编译器中未定义行为的非常深刻的博客在这里:http://blog.regehr.org/archives/213。特别是它让你从编译器编写器的角度出发,编写器编写器的唯一目的是生成仍然满足规范的最快代码