在大学期间,我了解到编译器会优化我们的代码,以使可执行文件运行得更快。例如,当一个变量在一个点之后没有被使用时,它就不会被计算。
因此,据我所知,这意味着如果我有一个调用排序算法的程序,如果打印了算法的结果,那么该算法就会运行。但是,如果没有打印任何内容(或在其他任何地方使用),则程序甚至没有理由进行该调用。
所以,我的问题是:
在使用 gcc 编译时,这些事情(优化)会默认发生吗?或者仅当代码使用 O1、O2、O3 标志编译时?
最佳答案
当您第一次遇到新程序时,键入 man
后跟程序名称会很有帮助。当我为 gcc
做这件事时,它向我展示了这个:
Most optimizations are only enabled if an
-O
level is set on the command line. Otherwise they are disabled, even if individual optimization flags are specified....
-O0
Reduce compilation time and make debugging produce the expected results. This is the default.
总而言之,使用-O0
,执行路径中的所有代码都将实际执行。 (永远不能在任何执行路径中的程序文本,例如 if (false) {/* ... */}
,可能不会生成任何机器代码,但这是不可观察的。)执行的代码将感觉“如预期”,即它会做你写的。至少这是目标。
关于c - 默认情况下是否优化了 gcc 编译的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24548891/