关于ARM Keil5 Optimization level 优化等级的一些分析【转】

官网文档:
https://www.keil.com/support/man/docs/uv4/uv4_dg_adscc.htm

Optimization
Control compiler code optimization for the generated code. Sets the compiler command-line option -Onum:
Default: Use the compiler default or the setting of a higher Target or Group level.
Level 0 (-O0): Turn off all optimization, except some simple source transformations.
Level 1 (-O1): Turn off optimizations that seriously degrade the debug view.
Level 2 (-O2): High optimization (default level). The debug view might be less satisfactory because the mapping of object code to source code is not always clear.
Level 3 (-O3): Maximum optimization. Note that Level 3 in combination with Optimize for Time may generate more code that Level 2 since it may unroll loops.

翻译如下:
在这里插入图片描述

Optimization level -O0

-O0禁用所有优化。使用-O0可以加快编译和构建时间,但是生成的代码比其他优化级别要满。与其他优化级别相比,-O0的代码大小和堆栈使用率明显要高。生成的代码与源代码密切相关,但生成的代码要多得多,包括死代码。

Optimization level -O1

-O1支持编译器中的核心优化。因为这个级别比-O0提供了更好的代码质量,因此它能提供了很好的调试体验。堆栈的使用也在-O0的基础上有所提高。为了获得良好的调试体验,Arm推荐使用此选项。
-O1与-O0的区别是:
1.使能了优化,这可能会降低调试信息的保真度。
2.内联和尾调是启用的,意味着回溯可能不会提供运行函数的堆栈,而这个堆栈可能是在读源代码过程中是被需要的。
3.如果不需要结果,则可能不会在预期的位置调用没有副作用的函数,或者可能会省略该函数。
4.变量的值在不再使用之后可能在其范围内不可用。例如,它们的堆栈位置可能已经被重用。

Optimization level -O2

与-O1相比,-O2具有更高的性能优化。与-O1相比,它增加了很少的新优化,并更改了优化的启发式。这是编译器可能生成向量指令的第一个优化级别。它还会降低调试体验,并可能导致比-O1更大的代码大小。
高度优化,调试信息不友好,有可能会修改代码和函数调用执行流程,自动对函数进行内联等。
-O2与-O1的区别是:
1.编译器认为对于内联调用站点有利的阈值将可能会增加;
2.执行的循环展开量可能会增加;
3.可以为简单的循环和独立标量操作的相关序列生成向量指令;

Optimization level -O3

最大程度优化,产生极少量的调试信息。会进行更多代码优化,例如循环展开,更激进的函数内联等。
另外,可以通过单独设置 --loop_optimization_level=option 来控制循环展开的优化等级。

总结:

  • 优化等级越高,生成的执行文件越小,但是编译速度会越慢。目前单片机性能来说,不需要刻意压缩执行文件容量。
  • 优化等级越高,越容易影响仿真调试信息的保真度,同时,可能会影响到代码逻辑(例如if和else逻辑),以及函数内部需要再次声明的结构体而不再声明(加static可以解决)。
  • 目前测试,建议使用level 0优化等级。

原文链接:
https://blog.csdn.net/weixin_37787043/article/details/108759503?utm_medium=distribute.pc_relevant_bbs_down.none-task–2allsobaiduenddefault-3.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task–2allsobaiduenddefault-3.nonecase

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值