当前位置:  开发笔记 > 编程语言 > 正文

gcc优化级别有什么区别?

如何解决《gcc优化级别有什么区别?》经验,为你挑选了2个好方法。

GCC中不同优化级别之间有什么区别?假设我不关心任何调试挂钩,为什么我不能使用可用的最高级别的优化?更高级别的优化是否必然(即可证明)生成更快的程序?



1> Martin W..:

是的,更高的水平有时可能意味着更好的表现.但是,根据您的代码,它可能会导致问题.例如,分支预测(在-O1和up中启用)可以通过引起竞争条件来破坏写得不好的多线程程序.优化实际上会决定比你写的更好的东西,在某些情况下可能不起作用.

有时,较高的优化(-O3)不会增加合理的好处,但会增加很多额外的大小.您自己的测试可以确定此大小权衡是否为您的系统带来合理的性能提升.

最后,GNU项目默认将所有程序编译为-O2,而-O2在其他地方相当普遍.


-O0是默认值.

2> Todd Gamblin..:

一般优化级别高于 -O2(仅-O3适用于gcc,但其他编译器具有较高的)包括可以增加代码大小的优化.这包括循环展开,大量内联,无论大小的对齐填充等等.其他编译器提供高于级别的矢量化和过程间优化-O3,以及可以以正确性为代价提高速度的某些优化(例如,使用更快,更不准确的数学例程).在使用这些东西之前检查文档.

至于性能,这是一个权衡.一般来说,编译器设计者会尝试调整这些内容,以免它们降低代码的性能,因此-O3通常会有所帮助(至少在我的经验中),但您的里程可能会有所不同.并非总是如此,真正积极的大小改变优化将提高性能(例如,真正积极的内联可以让您缓存污染).

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有