有时候,程序在Debug模式下运行的好好的,一Release就crash了。 有时候,程序在Debug模式下崩溃了,Release模式下居然能正常运行。 以上这种情况,可能很多人都遇到过。 用C/C++的朋友都知道编译器编译有各种优化级别,编译器优化级别大体如下: O0(默认选项):不开启优化,方便功能调试 Og:方便调试的优化选项(比O1更保守)...
包含O2选项中不增加代码大小的优化项 Og: 优化性能同时不损害可调试性。包含O1选项中不损害可调试性的优化项 Ofast: 忽视严格的标准编译性。包含O3中所有选项及` -ffast-math` O1优化项 代码语言:txt 复制 -fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments -fcompare-elim -fcprop-registers ...
最新的版本是GCC 11.2.0。GCC 4.6.4以上的版本优化等级是一样的,只是优化选项略有差异。 1 优化等级说明 GCC 4.6.4以上版本,有**-O0、-O1、-O2、-O3、-Os、-Ofast、-Og**几个优化等级,参数 -O1、-O2、-O3 中,随着数字变大,代码的优化程度也越高,不过这在某种意义上来说,也是以牺牲程序的可调试性...
1、优化级别说明 GCC优化级别有-O0、-O1、-O2、-O3、-Og、-Os、-Ofast 总结如下: 举例: 2、MDK优化等级修改 全局设置优化等级 局部设置优化级别 通常情况下,随着代码结构复杂,第三方组件的加入,全局的优化等级已经不能满足实际的使用场景; MDK可以单独对单个文件,或者单组文件进行单独设定优化级别。 代码中设置...
Og 如果是为了调试,该选项是比O0更好的选择,它会打开O1大部分优化标志,但是不会启用那些影响调试的标志: -fbranch-count-reg -fdelayed-branch -fdse -fif-conversion -fif-conversion2 -finline-functions-called-once -fmove-loop-invariants -fssa-phiopt ...
-Og,调试代码时推荐使用的优化级别。 gcc -Q --help=optimizer -Ox 可查看各优化级别开启的优化选项。 参考链接:https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html 编译器的限制 为了保证程序运行的正确性,编译器不会对代码的使用场景做任何假设,所以有些代码编译器不会进行优化。下面举两个比较隐晦的...
相对于-O0生成的调试信息,-Og是为了能够生成更好的调试信息。和-O0一样,-Og选项关闭了很多优化开关。 如果同时使用多个不同level -O优化选项来进行编译,编译器会根据最后一个-O的level来决定采用那种优化级别。 2. GCC 调试选项 GCC允许您将-g与-O配合使用。GCC开启优化编译选项的结果有时可能会令人惊讶: ...
/Og开关启用全局优化,全局优化只作用域那些通过表面分析就可以被优化的函数上,而这些函数内部调用的其他函数则不会被优化。如果(链接时代码生成)LTCG被启用,/Og允许代码全局优化(WPO)。 当你需要让不同的函数进行不同的优化时,比如一些进行空间尺寸优化而另一些进行执行速度优化,那么优化编译参数就很有用了。但是如果...
g++-Ogtest.cpp-otest-Og 1.2 验证不同-O参数对程序大小、性能的影响 使用ll -Slr命令将所有编译后的程序按大小从小到大排序显示,如图所示,使用-Os参数编译的程序大小最小,使用-Ofast参数编译的程序大小最大,而优化级别0~3和大小没有对应关系,优化级别高的大小不一定小。
1 -O0/-Og -O0是默认选项,不执行任何优化。在编译调试版本的时候,一般使用-O0,可以确保调试执行过程完全和代码一致(如果使用优化选项,根据源文件设定的断点和经过优化编译得到的程序可能对不上,所以不能准确停在预期的地方)。 -Og是针对调试的优化选项,它会启用-O1的优化指令,除了那么可能会干扰调试的优化选项...