大家都是怎么选择合适的编译器优化等级啊?
等级高了老是不按我的逻辑运行 我都是默认设置,没有改过。 等级提高有时候会优化掉部分代码。 较高的优化级别可能会增加代码大小,因为编译器可能会生成更复杂的代码。 一般是优化等级比较低就可以 那就把优化等级调低一点,使用一些宏命令进行限制Volate 太高了不行啊,容易出现程序bug啊选择合适的编译器优化等级是一个需要权衡性能、代码大小、调试能力和功耗等多个因素的过程。不同的优化等级会对生成的代码产生不同的影响
大多数编译器(如GCC、Clang、Keil等)提供了多个优化等级,常见的包括:-O0(无优化):不进行任何优化,生成的代码与源代码非常接近,便于调试。-O1(基本优化):进行一些基本的优化,如常量折叠、死代码消除等,但不会进行复杂的优化。-O2(中级优化):在-O1的基础上进行更多的优化,如循环优化、函数内联等,生成的代码性能更好。-O3(高级优化):在-O2的基础上进行更激进的优化,如自动向量化、循环展开等,生成的代码性能最高,但可能会增加代码大小。-Os(大小优化):在-O2的基础上进行优化,以减小代码大小为主,适用于资源受限的嵌入式系统。-Og(调试优化):在-O1的基础上进行优化,同时保持良好的调试体验,适用于开发和调试阶段
在开发和调试阶段,通常选择较低的优化等级,如-O0或-Og。这样可以确保生成的代码与源代码非常接近,便于调试和分析
-O0:不进行任何优化,生成的代码与源代码非常接近,便于调试
一般可以选择-Og:在-O1的基础上进行优化,同时保持良好的调试体验,适用于开发和调试阶段
在性能优化阶段,可以选择较高的优化等级,如-O2或-O3。这样可以生成性能更好的代码,但可能会增加代码大小和调试难度
在资源受限的嵌入式系统中,通常选择-Os优化等级。这样可以生成较小的代码,节省内存和存储空间
选择优化等级时,需要权衡性能、代码大小和调试能力
如果项目对性能要求很高,可以尝试更高的优化等级。 空间大的情况下不优化 对于对运行效率要求不高的应用,较低的优化等级(如-O1)可能就足够了。 开发阶段 通常使用**-O0或-O1**,以便于调试。 根据项目的性能要求、内存限制和代码大小来选择合适的优化等级。如果对性能有较高要求,可以选择较高的优化等级;如果对内存和代码大小有严格限制,可以选择较低的优化等级。