GCC的优化

Tim*_*Tim 8 optimization gcc

我有两个问题:

(1)我在某处学到了-O3不推荐使用GCC,因为

-O3优化级别可以提高生成的可执行文件的速度,但也可以增加其大小.在这些优化不利的某些情况下,此选项实际上可能会使程序变慢.实际上它不应该在系统范围内使用gcc 4.x. 自版本3.x以来,gcc的行为发生了重大变化.在3.x中,-O3已被证明导致执行时间略快于-O2,但gcc 4.x不再是这种情况.使用-O3编译所有包将导致需要更多内存的更大二进制文件,并且将显着增加编译失败或意外程序行为(包括错误)的几率.缺点超过了好处; 记住收益递减的原则.对于gcc 4.x,不建议使用-O3.

假设我有一个工作站(Kubuntu9.04),它有128 GB内存和24个内核,并且由许多用户共享,其中一些用户可能使用60 GB内存运行密集程序.对于我来说,-O2比-O3更好吗?

(2)我还了解到,当正在运行的程序意外崩溃时,任何调试信息都优于无,因此建议在开发和部署时优化程序使用-g.但是当使用-ggdb3与-O2或-O3一起编译时,它会降低执行速度吗?假设我仍在使用相同的工作站.

Lau*_*nis 6

  1. 知道肯定的方式是基准您的应用程序和-O2 -O3编译.此外,还有一些单独的优化选项-O3包含,您可以单独打开和关闭.关于更大二进制文件的警告,请注意,仅仅比较使用-O2和-O3编译的可执行文件大小在这里不会有太大作用,因为它是这里最重要的小型关键内部循环的大小.你真的要基准.

  2. 它将导致更大的可执行文件,但不应该有任何可衡量的减速.