有人可以告诉我为什么我们需要将-o3与gcc中的-o联系起来编译c程序这个简单的问题,这有助于提高编译速度或减少编译时花费的时间吗?
感谢!!!
答案 0 :(得分:1)
它可能会提高生成的代码的性能。
原则上,编译通常需要更长,因为这需要(更多)编译器进行更多分析。
对于典型的现代C ++代码,-O2和更高的效果可能非常显着(一个数量级,具体取决于程序的性质)。
手册页中记录了在各种优化级别执行哪些优化:http://linux.die.net/man/1/gcc
请记住,虽然各种优化可能会使潜在的错误显现出来,因为允许编译器利用Undefined Behaviour¹来实现更高效的目标代码。
未定义的行为潜伏在语言标准未准确指定需要发生的位置的地方。这些可能非常微妙。
所以我建议使用高于-O2的任何东西,除非你有严格的质量控制措施来防止这种隐藏的未定义行为(想想valgrind / purify,静态分析工具和(压力)测试)。
¹关于优化编译器中未定义行为的非常深刻的博客在这里:http://blog.regehr.org/archives/213。特别是它让你从编译器编写器的角度出发,编写器编写器的唯一目的是生成仍然满足规范的最快代码。