编译器优化等级简述
栏目:行业动态 发布时间:2024-05-06
编译优化,会使编译器尝试以牺牲编译时间和调试程序的能力为代价,来提高性能或代码大小;合理的优化级别,能够在代码体积、执行性能、RAM占有率上获得均衡!1、优化级别说明GCC优化级别有-O0、-O1、-O2、-O3、-Og、-Os、-Ofast总结如下:优化级别说明备注-O0关闭所有优化代码空间大,执行效率低-O1基本优化等级编译器在不花费太多编译时间基础上,试图生成更快、更小的代码

编译优化,会使编译器尝试以牺牲编译时间和调试程序的能力为代价,来提高性能或代码大小;
合理的优化级别,能够在代码体积、执行性能、RAM占有率上获得均衡!
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

1、优化级别说明

GCC优化级别有-O0、-O1、-O2、-O3、-Og、-Os、-Ofast
在这里插入图片描述

总结如下:

优化级别说明备注
-O0关闭所有优化代码空间大,执行效率低
-O1基本优化等级编译器在不花费太多编译时间基础上,试图生成更快、更小的代码
-O2O1的升级版,推荐的优化级别编译器试图提高代码性能,而不会增大体积和占用太多编译时间
-O3最危险的优化等级会延长代码编译时间,生成更大体积、更耗内存的二进制文件,大大增加编译失败的几率和不可预知的程序行为,得不偿失
-OgO1基础上,去掉了那些影响调试的优化如果最终是为了调试程序,可以使用这个参数。不过光有这个参数也是不行的,这个参数只是告诉编译器,编译后的代码不要影响调试,但调试信息的生成还是靠 -g 参数的
-OsO2基础上,进一步优化代码尺寸去掉了那些会导致最终可执行程序增大的优化,如果想要更小的可执行程序,可选择这个参数。
-Ofast优化到破坏标准合规性的点(等效于-O3 -ffast-math )是在 -O3 的基础上,添加了一些非常规优化,这些优化是通过打破一些国际标准(比如一些数学函数的实现标准)来实现的,所以一般不推荐使用该参数。

举例:
在这里插入图片描述
在这里插入图片描述

2、MDK优化等级修改

  • 全局设置优化等级
    在这里插入图片描述

  • 局部设置优化级别

通常情况下,随着代码结构复杂,第三方组件的加入,全局的优化等级已经不能满足实际的使用场景;
MDK可以单独对单个文件,或者单组文件进行单独设定优化级别。

在这里插入图片描述

  • 代码中设置优化级别

在代码中,针对某个函数进行优化级别单独设置

https://www.keil.com/support/man/docs/armcc/armcc_chr1359124988971.htm
在这里插入图片描述

AC5中设置方法:

 

AC6中设置方法:

 

参考:
https://www.cnblogs.com/armfly/p/15605027.html

平台注册入口