我的程序在调试模式和发布模式下运行的速度在VS2012中有很大差异。但是,无论我是使用调试模式(使用-g选项)还是使用释放模式,当我使用g ++运行我的程序时,速度几乎没有变化。任何人都可以告诉我这是否是普通的吗?
答案 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)
默认情况下,调试模式在已编译文件中包含调试信息,而发布通常启用优化。所以一般来说,发布模式应该更快。人们可以从名字中猜到这一点。