我有两个问题:
(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一起编译时,它会降低执行速度吗?假设我仍在使用相同的工作站.
该只知道肯定的方式是基准您的应用程序和-O2 -O3编译.此外,还有一些单独的优化选项-O3包含,您可以单独打开和关闭.关于更大二进制文件的警告,请注意,仅仅比较使用-O2和-O3编译的可执行文件大小在这里不会有太大作用,因为它是这里最重要的小型关键内部循环的大小.你真的要基准.
它将导致更大的可执行文件,但不应该有任何可衡量的减速.