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

n3v*_*m03 1 c++ compiler-construction

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

ric*_*ici 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
Run Code Online (Sandbox Code Playgroud)

-Os  similar to -O2, but optimizing also for executable size.
Run Code Online (Sandbox Code Playgroud)

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

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

如果你指定一个非优化选项-O0(如果你没有指定任何-O选项,这是默认选项),那么编译器可能会重新排序语句,将变量移动到寄存器,否则会使调试器生活困难(也就是说,这个人都是进行调试,以及他们用来帮助​​他们的软件).gdb将竭尽全力应对,gcc并将提供gdb帮助,但你可能仍会觉得它令人困惑.但是,-g即使在优化的构建中也很常见,因为它使读取核心图像更容易.


Dar*_*rer 7

gcc -g选项不会生成调试版本,而只生成调试信息(pdb文件).这与在Visual Studio中使用"Release"配置相同,但启用了"Generate debug info"选项.