GCC:使用添加的基本debbuging信息进行编译(flag -g)对性能的影响是什么?

时间:2015-12-12 19:57:36

标签: c performance debugging makefile

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

在其中一些我找到了" -g"包含CCFLAGS中的标志和LDFLAGS选项,即使在非调试目标中也是如此。我想知道它的作用,并发现它为代码添加了一些基本的调试信息。

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

1 个答案:

答案 0 :(得分:1)

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

  

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

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

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

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

如果存在任何副作用,您只能将其与您的实施进行对比,您无法将其他人获得的知识转移到您的代码/算法中。