11 gcc compiler-flags compiler-optimization
关于编译器(GCC)所做的优化,标准做法是什么?每个选项(-O,-O1,-O2,-O3,-Os,-s,-fexpensive-optimizations)的作用有何不同,我如何确定最佳选项?
通常-O2是一个很好的优化级别,首先尝试.
但是,如果您希望获得最佳结果,则最终会尝试许多优化级别,因为您无法预先知道哪个级别最适合您的应用.
另请注意,优化结果应随每个CPU而变化(在某些CPU上,针对大小进行优化可能实际上产生比优化速度更好的速度).
仅供将来参考,以下是每个级别的简要说明(您可以在文档http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html中找到完整的说明):
-O(与-O1相同):使用-O,编译器会尝试减少代码大小和执行时间,而不执行任何需要大量编译时间的优化.
-O2:优化更多.GCC几乎执行所有支持的优化,不涉及空速 - 权衡.与-O相比,此选项增加了编译时间和生成代码的性能.
-O3:优化更多.-O3打开-O2指定的所有优化,并打开-finline-functions,-funswitch-loops,-fpredictive-commoning,-fgcse-after-reload,-ftree-vectorize,-ftree-partial-pre和 - fipa-cp-clone选项.
-Os:优化尺寸.-Os启用所有通常不会增加代码大小的-O2优化.它还执行旨在减少代码大小的进一步优化.
-Ofast:无视严格的标准合规性.-Ofast启用所有-O3优化.它还支持对所有符合标准的程序无效的优化.它打开-ffast-math和Fortran特定的-fno-protect-parens和-fstack-arrays.如果您使用多个-O选项(包含或不包含级别编号),则最后一个选项是有效的选项.
归档时间: |
|
查看次数: |
2456 次 |
最近记录: |