gcc -g 调试标志会影响程序执行吗?

2024-04-21

我刚刚测试了我正在工作的一个程序,当我使用 -g 编译它时,我发现它的执行速度快了 3μs(统计上显着的变化)。这对我来说毫无意义 - 我认为 -g 标志不应该影响程序执行,即使它影响程序执行也会使它运行得更慢,而不是更快。

谁能告诉我为什么会发生这种情况?是否改变了程序的执行流程?我没有使用 -O 进行编译,因为我需要它完全按照编写的方式执行,但如果 -g 可以通过更改指令顺序使其运行得更快,我显然应该使用它。

所以我需要确切地知道 -g 标志对程序做了什么改变。

编辑:我运行的测试越多,t 值就越大(= 差异在统计上越显着)。这绝对不是测量错误——有些事情正在发生。


正如其他人所说,调试符号不会改变代码的控制流,除非编译器中存在(不太可能)错误。

不过,它改变了执行,因为可执行文件变得更大,并且执行的代码更广泛地分布在更多页面上。您可以预期会有更多缓存未命中和 IO 信号。在多任务环境中(甚至 Linux/busybox 系统也是如此),这可能会导致调度行为略有不同。

另一方面,测量您所描述的如此微小的时间差异本身就是一门艺术。您可能处于海森堡环境中,您的测量会影响执行时间。您的测量结果可能会显示出统计上显着的偏差,但我会非常小心地解释它们,因为这样和这样的选项可以使代码更快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gcc -g 调试标志会影响程序执行吗? 的相关文章

随机推荐