1、 文档目标
记录在NXP的开源环境S32DS中GHS编译器优化等级的查看和设置。后续节约解决客户问题所花费的时间。
2、 问题场景
客户咨询编译优化问题,他们在S32 Design Studio中调用GHS的编译器,以便减少授权的占用时间。他们不了解如何查看和设置GHS编译器的优化等级。
3、软硬件环境
1)、软件版本:S32 Design Studio
2)、电脑环境:Windows 11
3)、外设硬件:无
4、解决方法
1)、打开S32DS,选中项目点击右键,选中“Properties”,进入设置界面。

图4-1
2)、进入“Properties for test”,选择“C/C++Build” -->"Settings"-->"Optimization",在 Optimization Strategy框内,选择相应的优化等级进行使用。

图4-2-1
可以通过下面的表格去选择符合自己需求的优化等级。(该表格是以-Onone优化等级为基准来评定。”+”:表示相对于-Onone有所提升,”-”:表示相对于-Onone有所降低,”=”:表示相对于-Onone没有变化)
Automatic Vector Optimization:控制矢量优化。如果没有选择优化策略,该选项还启用-Ospeed。
Default Optimization Level:控制程序的整体优化配置文件。
Optimize for Speed and Size (-O1):优化构建的速度和大小,避免优化牺牲一个为另一个。
隐含 -Ogeneral -frigor=fast -delete .
Optimize for Speed (-O2) :为速度优化构建。
隐含 -Ospeed -Omax -OV -OI -Olink -frigor=fast.
Optimize for Additional Speed (-O3): 优化构建速度,与额外的优化,以提高速度启用。
隐含 -Ospeed -Omax -OV -OI -OB -Ointerproc -Olink -frigor=fast.
Optimize for Size (-Os) :根据大小优化构建。
隐含 -Osize -Omax -frigor=fast -delete .
Optimize for Additional Size (-Oz):针对大小进行优化构建,使用额外的优化来改进启用的大小。
隐含 -Osize -Omax -Olink -Ointerproc -frigor=fast.
Optimize for Improved Debugging (-Og):优化改进的调试,意味着- Omoredebug。
在使用此优化级别时,可以将命令行优化策略设置为-Odebug、-Omoredebug或-Omaxdebug。
Default Optimization Level (-Od) :删除任何当前优化级别,并将工具链返回到默认优化状态。
在使用此优化级别时,可以将命令行优化策略设置为任何值。
No Optimizations (-O0):没有优化,禁用构建的优化。
隐含 -Onone
Intermodule Inlining:启用两次内联。如果没有选择优化策略,该选项还启用-Ospeed。
Interprocedural Optimizations:
Wholeprogram Interprocedural Optimizations(-Owholeprogram):启用全程序优化可以在高水平上分析程序控制和数据流。执行了速度和大小优化,例如一个调用站点内联,过程间常量传播和死代码消除,以及过程间别名分析。这个选项可以同时提高程序的速度和大小。如果没有选择优化策略,则该选项启用-ospeed
Standard Interprocedural Optimizations(-Ointerproc)启用过程间优化允许基于被调用函数的知识进行优化,例如过程间别名分析。与 -Owholeprogram不同,-Ointerproc不要求整个程序在编译期间可用。然而,-Owholeprogram优化的一个严格子集应用于-Ointerproc。如果没有选择优化策略,该选项启用-Ospeed。
Analysis Without Optimizations(-Oip_analysis_only)执行过程间分析,但不应用任何优化。
Off( -Onoipa)[默认]禁用所有过程间优化。
Linker Optimizations:控制链接器优化中列出的链接器优化。
On(-Olink)根据您的整体优化策略启用某些链接器优化。许多这些优化都会对代码进行复杂的更改。这些更改可能会减慢链接阶段,产生更难调试的代码,或者有其他缺点。若要禁用单个链接器优化,请将其与此选项一起设置为“关闭”。
启用 -Olink 隐含-delete和-uvfd。此外,如果启用了-Osize,则启用-Olink会隐式启用-codefactor。在构建共享对象时,这可能导致无法解析的符号。
Off (-Onolink)[默认]
注意:设置-Olink可能会导致DWARF调试信息与内存中的程序不同步。
【更多软件使用问题请站内搜索或关注B站:查看视频教学】
优化等级 | 编程和调试能力 | 代码内存优化 | 编译速度 | 执行速度 |
-Onone | = | = | = | = |
-Ospeed | - - - | + + + | - - - | + + + + + |
-Osize | - - | + + + + + | - - | + + + |
-Ogeneral | - - | + + + + | - - | + + + + |
-Odebug | = | + + | - | + + |
-Omoredebug | + + | + | - | + |
-Omaxdebug | + + + | - | = | - |