只对单个函数/文件启用编译器优化
Enable compiler optimisation only for individual functions/files
我正在Visual Studio 2012环境中编写c++代码。代码库不是很大(包含大约10-12个源文件)。在我的项目中,一些函数的执行时间是巨大的(比如在REL模式下10秒,在DEBUG模式下50秒)
现在,在调试时,我经常需要查看在应用程序生命周期结束时执行的函数。是否有一种方法来禁用编译器优化仅为特定的功能和/或文件在我的项目。这将使我能够优化一些计算广泛的函数
的执行。注意:我之前错误地提到了"调试符号"而不是"编译器优化"。我基本上是问这个问题w.r.t.编译器优化,因为它可能变得难以检查变量值,而调试与断点。
您可以在properties->C/c++ -> optimization对话框中打开或关闭特定文件的优化。这是您将用于整个项目的相同对话框,但是每个文件设置将覆盖项目设置。
如果你愿意,你也可以用#pragma optimize( "", off )
和#pragma optimize( "", on )
包围特定的函数或代码区域。
无论哪种方式,您都需要为整个程序生成调试符号。将它们放在那里不会减慢任何速度,并且允许您在需要时调试优化的代码。这是比较困难的,因为局部变量等在观察窗口中经常不正确,行号可能不完全对齐,但在它和反汇编视图之间,您通常可以知道发生了什么。
您可以在代码中使用_DEBUG宏。您可以为文件定义这个宏,然后在文件末尾通过undef
将其删除#ifndef _DEBUG //enable debug
#define _DEBUG
...//your code
#endif
#ifdef _DEBUG //disable debug
#undef _DEBUG
#endif
这里是参考:http://msdn.microsoft.com/en-us/library/5bb575z2.aspx
相关文章:
- C/C++编译器通常会删除重复的库吗
- 编译时未启用intel oneApi CUDA支持
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- Win32编译器选项和内存分配
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 删除编译器优化并在发布中启用 pdb 文件
- 为什么我应该始终启用编译器警告
- 请求C 17的编译器通过使用-STD 17标志在-STD = C 17时,将启用STD ::变体的支持
- 启用 C++14 英特尔编译器
- 启用-std=c++0x或-std=gnu++0x编译器选项
- 如何查看英特尔 ICC 编译器上启用了哪些编译选项
- 如何启用SSSE3内部函数,但禁用它们在编译器优化中的使用
- 使用自身初始化成员变量时启用编译器警告
- 如何在代码块中关闭带有[默认启用]标记的编译器警告?
- 只对单个函数/文件启用编译器优化
- 启用优化后的不同浮点结果-编译器错误
- 如何在CLion中启用所有编译器警告
- 编译器错误-未启用C++SSE3指令集
- SSE指令在实践中优化了什么,编译器如何启用和使用它们