打印
[PIC®/AVR®/dsPIC®产品]

XC8 - C 优化级别

[复制链接]
627|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在Microchip的MPLAB X环境中,用于开发PIC微控制器等应用,C编译器提供了不同的优化级别,可以调整代码的编译方式,以提高性能或减小代码大小。这些优化级别由数字 (0、1、2、3) 和字母 ('s') 指定,每个级别都有自己的特征和用途。以下是每个优化级别的摘要:

0 级 (O0)
说明:这是关闭优化时的默认优化级别。
特点:编译器在不注重优化的情况下进行快速编译,由于生成的代码结构与源代码紧密匹配,因此代码更易于调试。
1 级 (O1)
描述:此级别寻求编译时间和优化之间的平衡,应用不需要大量编译时间的优化。
特点:它执行基本的代码优化,以提高速度和/或减小代码大小,而不会显着增加编译时间。此级别可能包括死代码消除和循环优化等优化。
2 级 (O2)
说明:在此级别,编译器会应用更积极的优化,这些优化可能会增加编译时间,但旨在以牺牲编译时间为代价来获得更好的代码性能。
特点:包括 O1 级别的所有优化,以及更高级的优化,如函数调用优化、更好的寄存器分配和流水线优化,旨在加快程序执行速度。
3 级 (O3)
描述:O3 是最高级别的优化,专注于最大限度地提高程序速度。
特点:除了 O2 级别的优化外,该级别还可以重构循环、展开循环并使用更复杂的算法进行优化。由于这些优化,代码大小可能会增加。
级别 's' (Os)
描述:此级别特定于大小优化,旨在尽可能减小代码大小。
特点:重点是最小化最终代码大小,这对于内存有限的设备至关重要。这可能包括积极的死代码消除、类似函数的合并和其他大小缩减技术。
每个优化级别都有特定的用途,选择适当的级别取决于项目目标,是最大限度地提高速度、最小化代码大小,还是在两者之间找到平衡。调整优化级别可能会显著影响编译器生成的代码的性能和大小。



使用特权

评论回复
沙发
小灵通2018|  楼主 | 2024-3-15 14:59 | 只看该作者
重要:
在此存储库中执行的大多数 C 实现中,使用的优化选项是 's' (Os)。下图说明了如何在 MPLAB X 中配置此选项。需要注意的是,在极少数情况下,优化选项可能会不恰当地更改程序的行为,从而导致意外结果。然而,'s' (Os) 选项在该存储库中的所有实验中被证明是稳定的。

使用特权

评论回复
板凳
R2D2| | 2024-3-16 19:41 | 只看该作者
PIC那个指令体系是为了尽可能减少晶体管数量设计出来,极其不适合高级语言,老老实实用汇编吧。

使用特权

评论回复
地板
小明的同学| | 2024-3-26 21:32 | 只看该作者
一般都是用默认,不优化。

使用特权

评论回复
5
小明的同学| | 2024-3-26 21:33 | 只看该作者
R2D2 发表于 2024-3-16 19:41
PIC那个指令体系是为了尽可能减少晶体管数量设计出来,极其不适合高级语言,老老实实用汇编吧。 ...

现在会汇编的人太少了。

使用特权

评论回复
6
LEDyyds| | 2024-3-27 17:05 | 只看该作者
优化有时会将有用的函数优化掉

使用特权

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

本版积分规则

117

主题

1444

帖子

4

粉丝