程序的运行速度与Debug模式还是Release模式有关? [已关闭]

问题描述 投票:0回答:3

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

c++
3个回答
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
构建也很常见,因为它使读取核心图像更容易。


7
投票

gcc

-g
选项不生成调试版本,而仅生成调试信息(pdb文件)。这与在 Visual Studio 中使用“发布”配置相同,但启用“生成调试信息”选项。


0
投票

默认情况下,debug模式在编译文件中包含debug信息,而release通常启用optimizations。所以一般来说释放模式应该更快。从名字就可以猜到了。

© www.soinside.com 2019 - 2024. All rights reserved.