【发布时间】:2013-03-11 12:06:23
【问题描述】:
gcc 的发行说明在 -Og 上有点含糊:
它满足了对快速编译和卓越调试体验的需求,同时提供了合理水平的运行时性能。开发的整体体验应该优于默认优化级别-O0。
“总体开发经验”是否包括编译时间?如果我不需要调试符号并且正在优化编译时间,我应该使用 -O0 还是 -Og?
【问题讨论】:
-
如果你不需要调试符号你应该使用-O0
-
为什么不用不同选项的你的编译器对你的项目的完整构建进行计时,然后选择最快的那个?
-
如果你只对良好的性能感兴趣,正常水平是O2。 O0 几乎没有优化,它主要用于调试(例如,它不会优化未使用的变量,它不会改进容易修复的草率编码等)。
-
@teppic 谢谢 - 我的程序运行时间很短,所以我现在正在优化编译时间。
-
有一点要记住,
-O0,通常等同于“调试”,没有优化也没有符号。因此,诸如签名溢出之类的事情不会发出警告,它可以在启用正确警告的情况下产生警告。-Og有点像-O,但在0.5- 不完全是0,也不完全是1。-Og也会产生一些符号。我知道它不提供符号定义,通常可以在-g3获得。
标签: c++ debugging gcc optimization