c - 默认情况下是否优化了 gcc 编译的程序?

标签 c algorithm gcc compiler-construction compilation

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

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

所以,我的问题是:

在使用 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/

相关文章:

c - 构建 C 动态共享库给出 undefined symbol

c - 为什么不在我的代码中添加#include<linux/sched.h>,代码无法识别 task_struct 结构

MySQL C API内存泄漏?

c# - 让算法更高效

algorithm - MATLAB 中的可对角化矩阵

gcc - 如何以编程方式找到 OpenMP 共享库的路径?

c++ - 如何在ROS的cpp文件中找到头文件路径

c - 为什么结构必须单词对齐?

c - read() 用于从标准输入读取流

c - C 标准库中有二进制搜索方法吗?