gcc -O0与-Og编译时间

daj*_*daj 9 c++ debugging optimization gcc

gcc的发行说明在-Og上有点模糊:

它满足了快速编译和卓越调试体验的需求,同时提供了合理的运行时性能.总体开发经验应优于默认优化级别-O0.

"整体开发经验"是否包括编译时间?如果我不需要调试符号并且我正在优化编译时间,我应该使用-O0还是-Og?

von*_*and -4

由于-Og编译器必须构造并写出额外的数据(用于调试),因此需要更长的时间。只需编译为汇编程序(使用gcc -S -Og等)并进行比较。-O0但无论与运行时间之间有什么差异,与启动时间及其完整的机器-Og相比,都可能显得相形见绌。gcc

如果您想要编译时间,也许您应该考虑tccC。也许LLVM对于 C++ 更快。

  • 您是否有证据支持您的第一个主张,“使用 -Og 编译器必须构造并写出额外的数据(用于调试)”?如果我没有记错的话,这只适用于“-g”标志。查看 GCC 4.9.2 源代码(`gcc/opts.c`)表明,`-Og` 与 `-O1` 相同(`/* -Og 选择优化级别 1。*/`),但禁用了一些标志,这些标志将通过“-O1”或更高版本启用(“OPT_LEVELS_1_PLUS_NOT_DEBUG”、“OPT_LEVELS_1_PLUS_SPEED_ONLY”和“OPT_LEVELS_2_PLUS_SPEED_ONLY”)。 (5认同)
  • 我在这里发布了更广泛的答案:http://stackoverflow.com/a/27076307/427545 (3认同)