-Os:针对程序空间大小优化(多用于嵌入式系统)。-Os使能-O2中除去会增加程序空间的所有优化参数。同时-Os还会执行更加优化程序空间的选项。 -Os会关闭以下优化选项: -falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks -freorder-blocks-and-partition -fprefetch-loop-arrays -ftree...
1、优化级别说明 GCC优化级别有-O0、-O1、-O2、-O3、-Og、-Os、-Ofast 总结如下: 举例: 2、MDK优化等级修改 全局设置优化等级 局部设置优化级别 通常情况下,随着代码结构复杂,第三方组件的加入,全局的优化等级已经不能满足实际的使用场景; MDK可以单独对单个文件,或者单组文件进行单独设定优化级别。 代码中设置...
O2:常用的发布优化选项,在O1的基础上额外打开了四十多个优化选项,包括自动内联等规则 Os:产生较小代码体积的优化选项(比O2更保守) O3:较为激进的优化选项(对错误编码容忍度最低),在O2的基础上额外打开了十多个优化选项 Ofast:打开可导致不符合IEEE浮点数等标准的性能优化选项。 具体介绍如下: O0 编译器默认就...
(2)-O3在编译器流水线后期中启用更积极的指令优化。 4.-Os与-O3相比: (1)-Os与-O3相比,可减少代码大小。但会降低调试体验。 (2)显着降低了执行的循环展开量。 5.-Oz与-Os相比: (1)编译器仅针对代码大小进行优化,而忽略性能优化,这可能会导致代码变慢。 (2)未禁用功能内联。在某些情况下,内联可能会...
-Os:优化代码大小,通过减少指令数量和内存使用来减小生成的二进制文件大小。 -funroll-loops:循环展开,尝试将循环体复制多次以减少循环次数。 -fno-inline:禁用函数内联。 -finline-functions:启用函数内联。 -fno-omit-frame-pointer:不省略帧指针,有助于调试。 -fno-strict-aliasing:关闭严格的类型别名规则,可能会...
GCC 4.6.4以上版本,有**-O0、-O1、-O2、-O3、-Os、-Ofast、-Og**几个优化等级,参数 -O1、-O2、-O3 中,随着数字变大,代码的优化程度也越高,不过这在某种意义上来说,也是以牺牲程序的可调试性为代价的。 所有的优化选项如下: -faggressive-loop-optimizations -falign-functions[=n] ...
嵌入式系统:可能会使用-Os,以减少可执行文件的大小。 遇到的问题及解决方法 问题1:编译时间过长 原因:使用了高优化等级(如-O3或-Ofast),导致编译器花费更多时间进行复杂的优化。 解决方法:降低优化等级,例如从-O3改为-O2,或者使用并行编译(如make -j4)来缩短编译时间。
-Os:优化代码大小,以减少生成的二进制文件的大小为主要目标。 -Ofast:允许编译器进行一些可能违反严格IEEE/ISO浮点标准但能提高性能的优化。 -funroll-loops:展开循环,以减少循环控制带来的开销,但可能会增加代码大小。 -finline-functions:内联函数,将函数调用替换为函数体,以减少函数调用的开销。 3. gcc编译优化的...
-Os:优化代码大小,尽量减少生成二进制文件的体积,适用于内存受限的环境。 3. 编译器优化技巧 了解了优化级别后,我们再来看看编译器优化的几个常见技巧。 3.1 内联函数优化 编译器在优化过程中,会自动将一些频繁调用的小函数进行内联,也就是将函数的代码直接插入调用点,避免函数调用的开销。你也可以通过 inline 关键...
我们知道在C语言编译时,有那么几个常用的优化编译选项,分别是-O0,-O1,-O2,-O3以及-Os。之前一直觉得既然是优化选项,顶多是优化一下逻辑,提高一些效率或者减少一下程序大小而已。很少会觉得它们会影响程序的最终结果。直到最近在ARM平台上发现一个程序里的一个bug,才觉得这些优化选项有时候也没那么智能。或者说针...