只对单个函数/文件启用编译器优化

Enable compiler optimisation only for individual functions/files

本文关键字:启用 编译器 优化 文件 单个 函数      更新时间:2023-10-16

我正在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