程序的运行速度是否与调试模式或发布模式有关?

时间:2013-11-25 14:49:21

标签: c++ compiler-construction

我的程序在调试模式和发布模式下运行的速度在VS2012中有很大差异。但是,无论我是使用调试模式(使用-g选项)还是使用释放模式,当我使用g ++运行我的程序时,速度几乎没有变化。任何人都可以告诉我这是否是普通的吗?

3 个答案:

答案 0 :(得分:8)

gcc(和clang以及其他C / C ++编译器中),调试信息和优化是独立的选项。 “发布模式”没有单一选项;你需要更准确地定义你想要的东西。

-g选项指定您希望生成调试信息。您可以更精确 - 可以为调试信息请求特定格式 - 但在正常情况下,这不是必需的。退出-g 不会自动启用优化。

优化由-O选项和大量特定优化标志控制。如果未指定任何优化标志,则几乎不会执行任何优化。

优化有四个基本级别:

-O0  no optimizations that would affect debugging (the default)
-O or -O1  basic optimizations
-O2  more optimizations
-O3  yet more optimizations

-Os  similar to -O2, but optimizing also for executable size.

特定标志以-f开头。有数百个。但通常你不需要担心它。

对于某些体系结构,您还可以基于目标平台优化(或不优化)。例如,默认的i386版本不会使用现代芯片的所有功能。

如果指定除-O0以外的优化选项(如果未指定任何-O选项,则为默认选项),则编译器可能会重新排序语句,将变量移动到寄存器,否则使调试器生活困难(即,进行调试的人和他们用来帮助​​他们的软件)。 gdb会尽最大努力应对,gcc将为gdb提供帮助,但您可能仍会感到困惑。但是,即使在优化的构建中,使用-g进行构建也很常见,因为这样可以更轻松地读取核心图像。

答案 1 :(得分:7)

gcc -g选项does not produce a debug build,而只生成调试信息(pdb文件)。这与在Visual Studio中使用“Release”配置相同,但启用了“Generate debug info”选项。

答案 2 :(得分:0)

默认情况下,调试模式在已编译文件中包含调试信息,而发布通常启用优化。所以一般来说,发布模式应该更快。人们可以从名字中猜到这一点。