gcc 默认的优化等级是 -O0,在 -O0 条件下也是有极少量的优化的。
在没有任何优化选项的情况下,编译器的目标是降低编译成本,并使调试产生预期的结果。语句是独立的:如果您在语句之间使用断点停止程序,那么您可以为任何变量分配一个新值,或者将程序计数器更改为函数中的任何其他语句,从而从源代码中获得期望的结果。
打开优化标志使编译器试图以牺牲编译时间和可能的调试程序的能力为代价来提高性能和/或代码大小。
编译器根据它所掌握的程序知识进行优化。一次将多个文件编译为单个输出文件模式允许编译器在编译每个文件时使用从所有文件中获得的信息。
并非所有优化都直接由标志控制。本节仅列出具有标志的优化。
大多数优化在-O0时被完全禁用,或者如果在命令行上没有设置-O级别,即使指定了单独的优化标志。类似地,-Og抑制了许多优化过程。
根据目标和GCC的配置方式,可以在每个-O级别启用一组与此处列出的稍有不同的优化。您可以使用-Q--help=optimizer调用GCC,以找出在每个级别启用的优化的确切集合。有关示例,请参见控制输出类型的选项。
-O<number>将优化级别设置为<number>。
-Ofast针对速度进行优化,无视严格的标准合规性。
-Og优化调试体验,而不是速度或大小。
-Os优化空间而非速度。
/*
* O0 的描述如下:
*/
减少编译时间,使调试产生预期的结果。
-O0 做的优化非常非常少。
gcc --help=optimizers
gcc -Q --help=optimizers