级的优化。使用-Os 是不推荐的。 ◼ -O3: 打开所有 -O2 的优化选项并且增加 -finline-functions, -funswitch-loops,- fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize 优化选项。这是最高最危险 的优化等级。用这个选项会延长编译代码的时间,并且在使用 gcc4.x 的系统里不应全局 启用。
GDB 调试的时候发现程序的一些变量被优化了出现:optimizedout, 修改了优化等级为-O0 也不行,加-g 也不行。 查了一些资料发现-O0 确实无法做到让Gcc不优化,GCC 还是会把一些内容优化了。 真是苦恼。难道除了在函数面前加__attribute__((optimize(“O0”))) 的方式,没有别的办法让GCC 不要优化程序吗 通过...
-Ofast:3级,在-O3基础上增加了一些不安全的优化。例如,-Ofast开启的一个选项“-ffast-math”,包含了很多违反IEEE/ISO标准的优化,虽然能加速但会降低精度,也可能会产生一些错误的结果(主要影响高精度的浮点数运算)。 -Og:1级,用于调试的基础优化选项。在-O0基础上增加了一些不影响调试的优化,同时也会收集一...
让我们来逐⼀考察各个优化等级:-O0:这个等级(字母“O”后⾯跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码,这通常不是我们想要的。-O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图⽣成更快更⼩的代码。这些优化是⾮常基础的...
-O0:这个等级(字母“O”后面跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码,这通常不是我们想要的。 -O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成。
-O0:这个等级(字母“O”后面跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码,这通常不是我们想要的。 -O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成。
优化等级 -O1 -O2 -O3 -Os -Ofast -Og 一下内容摘自 Using the GNU Compiler Collection (GCC) 一般来说,如果不指定优化标识的话,gcc就会产生可调试代码,每条指令之间将是独立的:可以在指令之间设置断点,使用gdb中的 p命令查看变量的值,改变变量的值等。并且把获取最快的编译速度作为它的...
-O0:这个等级(字母“O”后面跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码,这通常不是我们想要的。 real 0m19.957s user 0m18.521s sys 0m1.406s 1590048 real 0m12.816s user 0m12.661s sys 0m0.138s -O1:这是最基本的优化等级。编译器会在不花费...
简介:基于GCC的编译器的优化等级的执行原理 作者:良知犹存 前情提示:在使用基于GCC做编译器的IDE的时候,在很多时候我们会选择不同的Optimize优化等级,不同的优化等级,在Debug中我们发现程序执行的逻辑和我们设定的代码执行流程并不是很一致,甚至有时候差异巨大。所以我们来基于GCC介绍一下编译器优化执行的逻辑。