打印
[开发工具]

keil编辑器中的优化等级

[复制链接]
2910|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cashrwood|  楼主 | 2024-12-26 23:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在KEIL编译器中,优化选项Optimization的-O0、-O1、-O2、-O3等级代表了不同的代码优化程度,其中等级越高,优化程度也越高。下面是对这些优化等级的详细解读:

优化等级详解
-O0(无优化)
特点:不进行任何优化,主要用于调试和开发阶段。此选项下,代码生成速度快,但生成的代码质量较低,程序执行效率较慢,且可能占用较大的内存空间。
适用场景:在需要详细调试代码或理解程序行为时,选择-O0可以确保生成的代码与源代码保持较高的相似性,便于调试。
-O1(基本优化)
特点:启用基本的优化策略,如常量折叠、未引用代码的删除等,以提高程序执行效率。相对于-O0,程序执行效率更高,但生成的代码大小可能有所增加。
适用场景:在开发过程中,为了平衡调试需求和性能要求,可以选择-O1进行优化。
-O2(中等优化)
特点:在-O1的基础上,进一步进行中等程度的优化,如循环展开、内联函数等。这些优化措施能够显著提高程序执行效率,同时在一定程度上减小代码大小。
适用场景:在产品开发阶段,为了提升程序性能,同时保持代码的可读性和可维护性,可以选择-O2进行优化。
-O3(高级优化)
特点:提供最高级别的优化,包括所有-O2的优化措施以及更高级的优化策略(如更复杂的循环优化、更激进的代码重排等)。相对于-O2,程序执行效率更高,但可能导致编译时间延长,且生成的代码可能更难于调试。
适用场景:在最终产品发布前,为了最大化程序性能,可以选择-O3进行优化。但需要注意的是,高度优化后的代码可能难以与源代码保持一一对应的关系,给调试带来一定困难。
优化等级对比
优化等级    描述    适用场景
-O0    无优化,主要用于调试和开发阶段    调试、理解程序行为
-O1    启用基本优化策略,提高程序执行效率    开发过程中平衡调试和性能要求
-O2    在-O1基础上进行中等程度优化,提升性能    产品开发阶段提升程序性能
-O3    提供最高级别优化,最大化程序性能    最终产品发布前优化性能

AC6优化选型中前面5项(default、-O0 ~ 3)和AC5的作用基本一样,但AC6多了三个选项。

-Ofast:启用-O3的所有优化,以及其他可能违反语言标准(严格遵守)的优化。

-Os balanced:平衡代码大小与代码速度。默认情况下,编译器执行优化以提高性能,但可能会增加image文件大小。

-Oz image size:优化代码大小,可以大幅度优化代码空间。

使用特权

评论回复
沙发
dongnanxibei| | 2024-12-27 12:05 | 只看该作者
默认不要优化

使用特权

评论回复
板凳
Clyde011| | 2024-12-28 07:39 | 只看该作者
我平时开发都是用-O0,调试方便,虽然效率低,但先把Bug解决了才是王道。

使用特权

评论回复
地板
公羊子丹| | 2024-12-28 07:39 | 只看该作者
如果是要提升性能的话,建议试试-O2,这个优化程度比较适中,不会影响调试太多。

使用特权

评论回复
5
周半梅| | 2024-12-28 07:39 | 只看该作者
-O3虽然性能强,但调试起来太难受了,尤其是代码重排后,断点直接失效。

使用特权

评论回复
6
帛灿灿| | 2024-12-28 07:39 | 只看该作者
AC6的-Ofast挺好用的,不过得注意,可能会有些地方和标准不兼容,要多测试。

使用特权

评论回复
7
童雨竹| | 2024-12-28 07:40 | 只看该作者
我用过-Oz优化代码大小,真的是能省不少空间,对内存紧张的项目特别有用!

使用特权

评论回复
8
万图| | 2024-12-28 07:40 | 只看该作者
不知道大家有没有遇到过,优化等级高了,有时候逻辑都跑偏了,最后只能降低优化等级。

使用特权

评论回复
9
Wordsworth| | 2024-12-28 07:40 | 只看该作者
AC6比AC5多了好多实用功能,尤其是那个-Os balanced,大小和性能都照顾到了。

使用特权

评论回复
10
Pulitzer| | 2024-12-28 07:40 | 只看该作者
开发阶段-O1和-O2切换挺方便,调试的时候用-O1,跑性能测试直接切到-O2。

使用特权

评论回复
11
Bblythe| | 2024-12-28 07:41 | 只看该作者
如果对编译时间敏感的话,建议别用-O3,编译一次得等好久,不如直接选-O2。

使用特权

评论回复
12
Uriah| | 2024-12-28 07:41 | 只看该作者
我一般发布前才用-O3或者-Ofast,测试过了就别动代码了,不然出了问题真心难查。

使用特权

评论回复
13
Stahan| | 2024-12-29 18:39 | 只看该作者
这个优化等级不同的优化点是什么

使用特权

评论回复
14
是你的乱码| | 2024-12-31 00:34 | 只看该作者
在 Keil 编译器 中,优化选项是用来控制编译器在生成机器码时对代码的优化程度的。

使用特权

评论回复
15
643757107| | 2024-12-31 19:12 | 只看该作者
是不是不优化是最好的选择?

使用特权

评论回复
16
地瓜patch| | 2024-12-31 22:51 | 只看该作者
周半梅 发表于 2024-12-28 07:39
-O3虽然性能强,但调试起来太难受了,尤其是代码重排后,断点直接失效。

搞优化会出错

使用特权

评论回复
17
地瓜patch| | 2024-12-31 22:52 | 只看该作者
万图 发表于 2024-12-28 07:40
不知道大家有没有遇到过,优化等级高了,有时候逻辑都跑偏了,最后只能降低优化等级。 ...

高级会有问题

使用特权

评论回复
18
地瓜patch| | 2024-12-31 22:53 | 只看该作者
Uriah 发表于 2024-12-28 07:41
我一般发布前才用-O3或者-Ofast,测试过了就别动代码了,不然出了问题真心难查。 ...

用o3找不到错误,最后只能用o0

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

1461

帖子

0

粉丝