GCC中不同优化级别之间有什么区别?假设我不关心任何调试挂钩,为什么我不能使用可用的最高级别的优化?更高级别的优化是否必然(即可证明)生成更快的程序?
Tod*_*lin 13
一般优化级别高于 -O2(仅-O3适用于gcc,但其他编译器具有较高的)包括可以增加代码大小的优化.这包括循环展开,大量内联,无论大小的对齐填充等等.其他编译器提供高于级别的矢量化和过程间优化-O3,以及可以以正确性为代价提高速度的某些优化(例如,使用更快,更不准确的数学例程).在使用这些东西之前检查文档.
至于性能,这是一个权衡.一般来说,编译器设计者会尝试调整这些内容,以免它们降低代码的性能,因此-O3通常会有所帮助(至少在我的经验中),但您的里程可能会有所不同.并非总是如此,真正积极的大小改变优化将提高性能(例如,真正积极的内联可以让您缓存污染).