为什么#pragma optimize(“”,off)

时间:2015-03-13 13:27:55

标签: c++ visual-studio mfc

我正在审查一个C ++ MFC项目。在某些文件的开头有这一行:

#pragma optimize("", off)

我知道这会为以下所有功能关闭优化。但这样做的动机通常是什么呢?

4 个答案:

答案 0 :(得分:24)

我专门使用它来获取特定代码集中的更好的调试信息,其余的应用程序是通过优化编译的。当由于应用程序的性能要求而无法运行完整的调试构建时,这非常有用。

答案 1 :(得分:16)

我发现生产代码是正确的,但却非常复杂,以至于它会使优化器混淆产生错误的输出。这可能是关闭优化的原因。

但是,我认为代码很可能只是错误,具有未定义的行为。优化器暴露了这种情况并导致错误的运行时行为或崩溃。如果没有优化,代码就会发生。#34;工作。"而不是找到并删除潜在的问题,有人"固定"它通过禁用优化并将其留在那里。

当然,这很脆弱,并且可以获得变通方法。新的硬件,新的操作系统补丁,新的编译器补丁,其中任何一个都可以打破这样的修复。"

即使这个编译指示是出于第一个原因,也应该大量记录。

答案 2 :(得分:8)

这些在代码库中的另一个原因......这是一个意外。

这是一个非常方便的工具,用于在调试时关闭特定文件上的优化器 - 正如上面提到的Ray。

如果在提交之前没有仔细审查更改列表,那么这些行很容易进入代码库,只是因为在提交其他更改时它们“偶然”仍在那里。

答案 3 :(得分:5)

我知道这是一个老话题,但我想补充一点,使用这个指令还有另一个原因 - 虽然与大多数应用程序开发人员无关。

在编写设备驱动程序或其他低级代码时,优化程序有时会生成不能正确与硬件交互的输出。

例如,需要读取内存映射寄存器(但不使用读取的值)来清除中断的代码可能会被编译器优化,从而产生无效的汇编代码。

这也可以说明为什么(正如Angew指出的那样)应明确记录使用该指令。

相关问题