【发布时间】:2014-07-29 19:17:09
【问题描述】:
我正在编译一个程序,使用 -O3 来提高性能,使用 -g 来调试符号(如果发生崩溃,我可以使用核心转储)。一件事让我很困扰, -g 选项会导致性能下降吗?当我查看带和不带 -g 的编译输出时,我发现不带 -g 的输出比带 -g 的编译输出小 80%。如果额外的空间用于调试符号,我不关心它(我猜),因为这部分在运行时不使用。但是,如果对于没有 -g 的编译输出中的每条指令,我需要在使用 -g 的编译输出中多执行 4 条指令,而不是我当然更愿意停止使用 -g 选项,即使以无法处理核心转储为代价。
如何知道程序中调试符号部分的大小,通常使用 -g 编译会创建一个运行速度比不使用 -g 编译的相同代码慢的程序?
【问题讨论】:
-
你对它进行了基准测试吗?
-
对这个程序进行基准测试并不容易,真的,如果容易做到我不会问这个问题,我会自己衡量惩罚。
-
我已经测量过了。看来他们的运行速度相同。
-g只是添加了调试符号。显然这取决于你的程序。 -
MSVC 使用单独的pdb file 来存储调试符号,您甚至可以在发布模式下进行调试,因此有时您甚至会面临一个已优化且其值未定义的变量。不知道gcc有没有类似的选项
标签: c++ debugging gcc optimization