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

Is the running speed of a program related to Debug mode or Release mode?

本文关键字:模式 速度 程序 运行 调试 布模式      更新时间:2023-10-16

在VS2012中,我的程序在调试模式和发布模式下运行的速度差异很大。然而,当我在linux中使用g++运行程序时,无论我使用调试模式(带-g选项)还是发布模式,速度都几乎保持不变。有人能告诉我这是否普通吗?

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构建也很常见,因为它可以更容易地读取核心图像。

gcc -g选项不生成调试构建,而只生成调试信息(pdb文件)。这与在Visual Studio中使用"Release"配置相同,但保留"Generate debug info"选项处于启用状态。

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