是与调试模式或发布模式相关的程序的运行速度
Is the running speed of a program related to Debug mode or Release mode?
在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通常启用优化。因此,一般来说,发布模式应该更快。人们可以从名字中猜到这一点。
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 为什么在保护模式下继承升级不起作用
- 如何在全屏模式下(在OpenGL中)使背景透明
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 此模式的C++RegEx
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- 使用可变模板的Broadcaster/Listener模式
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- c++方法参数只能在linux的发布模式下自行更改
- 资源管理设计模式
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 小字符串优化(调试与发布模式)
- 是与调试模式或发布模式相关的程序的运行速度
- 重复发送http请求,速度更快(异步模式)
- OpenGL+ffmpeg在全屏模式下速度较慢