+ -
当前位置:首页 → 问答吧 → gcc 加调试信息影响优化后的性能吗?

gcc 加调试信息影响优化后的性能吗?

时间:2010-08-30

来源:互联网

各位高人,我在程序编译中加了-O2优化,可为了调试,又加了-g选项,不知是否影响性能?

作者: liunxcu   发布时间: 2010-08-30

影响cache命中率。

作者: prolj   发布时间: 2010-08-30

回复 prolj
谢谢,但是请问还有没有更好的追踪bug的方法?目前我只知道靠调试信息来获得core文件,用来调试,但如果程序发布出去的话,
加调试信息是否合适呢?

作者: liunxcu   发布时间: 2010-08-30

我跑了下N皇后,这种纯计算为主的,速度上没有什么影响。
汇编代码中显示的结果是除了多了一些.loc 等段信息来定位代码其他倒没什么东西

作者: davelv   发布时间: 2010-08-30

回复 prolj
既然影响了cache命中率了,那应该也就会影响“速度”吧?可以这么理解吗?

作者: lsupper   发布时间: 2010-08-30

在非常小的计算量下,人感觉不出来,优化的效果

作者: zhangsuozhu   发布时间: 2010-08-30

cache就是用来加速指令存取的,如果没命中,则要到主存中去指令,那速度比从缓存中取慢,当然影响速度了

作者: liunxcu   发布时间: 2010-08-30



QUOTE:
cache就是用来加速指令存取的,如果没命中,则要到主存中去指令,那速度比从缓存中取慢,当然影响速度了{:3 ...
liunxcu 发表于 2010-08-30 09:48



不知道P大说的是指令缓存还是数据缓存,反正我的N皇后主要是寄存器的数据运算,对内存吞吐量不是特别大。如果想知道对内存性能的影响,楼主可以找个编码解码的程序运行下。

作者: davelv   发布时间: 2010-08-30

回复 davelv
其实我更关心的是,发布的程序可否加调试信息,不然以后的维护和除虫工作不知该怎么办了,不过就我的了解来说,指令缓存失靶,
比较影响性能,不知对否

作者: liunxcu   发布时间: 2010-08-30

随你吧,带debug就意味着源代码一块儿送出去了。一般都是带log可以出去。

作者: prolj   发布时间: 2010-08-30

本帖最后由 davelv 于 2010-08-30 10:19 编辑


QUOTE:
回复  davelv
其实我更关心的是,发布的程序可否加调试信息,不然以后的维护和除虫工作不知该怎么办了,不 ...
liunxcu 发表于 2010-08-30 10:05


你自己没有源代码么?给用户debug信息的程序做什么用?如果要分析bugreport的话也不需要这么做吧。
不仅仅是指令缓存的未命中,数据缓存同样很重要,我以前写的一个移位程序,用杂凑法(内存读写不连续)和翻转法(连续内存的读写)性能差了2倍。
而且这个重要性对不同的程序来说也不同的,具体原因上面有说。不过在汇编码中没有看到调试信息中包含指令(都是段信息),所以我理解为不会影响指令缓存的性能,不知道这样理解是否精确,欢迎各位明示。

作者: davelv   发布时间: 2010-08-30

谢谢各位了,受益匪浅啊

作者: liunxcu   发布时间: 2010-08-30

加不加 -g 对程序性能应该是没有任何影响的,非得说有影响,最多也是装载应用程序时,分析elf结构多耗几个cycle。

调试信息都是在单独的section中的,程序运行是不会装载的,只有调试程序才会装载。

实在不放心,还可以用 -O2 -g 来编译,然后备份一下,然后strip,然后运行,需要调试时,使用未strip前备份的那个来进行调试。

如果gcc支持vc那样分离的pdb来存放调试信息,大家也不会怀疑性能了

作者: drangon   发布时间: 2010-08-30

回复 drangon
那么,我用-O2 -g -s 的版本发布出去,如果崩溃了,产生core文件,然后我用-O2 -g 版本的可执行来调试core,不知可行吗?

作者: liunxcu   发布时间: 2010-08-30

回复 drangon
我的目的就是想收集反馈的bug信息,然后调试,而不是自己发现bug,自己调试。

作者: liunxcu   发布时间: 2010-08-30