我们的软件应该选择那个优化等级:
-O0 or no -O option
不优化,这也是默认选项,如果要debug程序,推荐开启该选项。
-O1 or -O
开启大多数基本的优化,通常不使用-O1。
-O2
开启更多的优化,这是许多软件的默认优化等级,包括内核和所有的GNU项目。
-O3
开启更多昂贵的优化。
-Os
优化binary的大小。
参考3,研究了不同优化等级的性能,-O0有更快的编译速度,但是性能有时候只有-O2的50%。
参考2,给出了推荐的编译flags。
参考:
[1] Robert Love.
[2] Florian Weimer. Recommended compiler and linker flags for GCC.
https://developers.redhat.com/blog/2018/03/21/compiler-and-linker-flags-gcc/
[3] Michael Larabel. The Performance Between GCC Optimization Levels.
https://www.phoronix.com/scan.php?page=article&item=gcc_47_optimizations&num=1
[4]
https://www.linuxtopia.org/online_books/an_introduction_to_gcc/gccintro_49.html