【问题标题】:GCC: Compiling with basic debbuging information added (flag -g) what are the effects on the performance? [closed]GCC:在编译时添加了基本的调试信息(标志 -g)对性能有什么影响? [关闭]
【发布时间】:2015-12-12 19:57:36
【问题描述】:

我最近检查了一些在该领域(编程等)非常熟练的作者制作的 Makefile。这些 makefile 用于在 linux 系统上使用 gcc 编译器编译的程序。

在其中一些中,我在 CCFLAGS 和 LDFLAGS 选项中发现了“-g”标志,即使在非调试目标中也是如此。我想知道这是做什么的,发现它在代码中添加了一些基本的调试信息。

我想知道对性能有什么负面影响?我应该更好地将它们从我自己的非调试目标中删除,还是在没有实际使用调试器或分析器时可以忽略负面影响?

【问题讨论】:

  • are the negative effects negligible when no debugger or profiler is actually used?最好问问神谕。
  • 使用和不使用该选项对您的代码进行基准测试。你的问题太笼统了,一般无法回答。最佳答案是:“视情况而定”。
  • @Marged 否,-g 不会禁用任何优化。

标签: c performance debugging makefile


【解决方案1】:

-g 参数本身不应对程序的性能产生负面影响:

GCC 允许您将-g 与-O 一起使用。优化所采取的捷径 代码有时可能会产生令人惊讶的结果:一些变量你 声明的可能根本不存在;控制流可能会短暂地移动到哪里 你没想到;某些语句可能无法执行,因为 他们计算出恒定的结果,或者他们的值已经在手边; 有些语句可能在不同的地方执行,因为它们是 移出循环。

(见https://gcc.gnu.org/onlinedocs/gcc-4.4.6/gcc/Debugging-Options.html#Debugging-Options

所以你可以将-g-O 结合起来,尽管你应该被警告上面提到的奇怪的事情可能会发生。因此,除非您尝试在客户站点上调试代码,否则将发布代码与调试符号结合起来是没有意义的。但是当您这样做时,您可能无法获得最佳的调试体验。

但请记住,调试会大大增加程序的文件大小。

如果有任何预期的副作用,你只能用你的实现来进行基准测试,你不能将别人获得的知识转移到你的代码/算法中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多