编辑
2024-12-17
记录知识
0
请注意,本文编写于 191 天前,最后修改于 59 天前,其中某些信息可能已经过时。

在平时调试过程中,经常会遇到编译的-O参数选择问题,作为这个小知识点,通过查阅资料,学习,总结如下:

总共的选项包括:-O/-O1, -O2, -O3, -O0, -Os, -Ofast, -Og, -Oz

-O/-O1 相对于O0,减少了代码体积,提升性能 代价是花费更多的编译时间和内存 -O2 相对于O1,花费较多的编译时间和内存空间,尽可能的提升代码的性能。增加的参数在参考链接可查 -O3 在O2上更进一步优化,花费更多的编译时间和更多的内存,但不保证代码因为优化导致的异常运行 -O0 默认选择的优化,其编译耗时最短,但也尽量开启了一下优化 -Os 在O2基础上,取消了对于空间换性能的参数,来追求二进制的体积 -Ofast 在O3上,启动更多的优化,比O3优化更不可靠 -Og 优化调试体验,在O1上去除了一些干扰调试的参数 -Oz 更加极致的优化空间,通过更多的指令才换取更小的二进制

参考:

https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html