是否默认优化了编译gcc的程序?

时间:2014-07-03 08:39:43

标签: c algorithm gcc compiler-construction compilation

在大学期间,我了解到编译器优化了我们的代码,以使可执行文件更快。例如,当一个点之后没有使用变量时,它将不会被计算。

因此,据我所知,这意味着如果我有一个调用排序算法的程序,如果打印算法的结果,那么算法将运行。但是,如果没有打印(或在其他任何地方使用),那么程序就没有理由进行该调用。

所以,我的问题是:

使用gcc进行编译时,默认情况下是否会发生这些事情(优化)?或者只有在使用O1,O2,O3标志编译代码时?

1 个答案:

答案 0 :(得分:4)

当您第一次见到新程序时,键入man后跟程序名称会很有帮助。当我为gcc做的时候,它向我展示了这个:

  

只有在命令行上设置-O级别时,才会启用大多数优化。否则,即使指定了单独的优化标志,它们也会被禁用。

     

...

     

-O0减少编译时间并使调试产生预期结果。 这是默认设置。

总结一下,使用-O0,执行路径中的所有代码都将实际执行。 (永远不会在任何执行路径中的程序文​​本,例如if (false) { /* ... */ },可能不会生成任何机器代码,但这是不可观察的。)执行的代码将感觉“按预期”,即它会做你写的。这至少是目标。