【问题标题】:Conditional optimization in Visual StudioVisual Studio 中的条件优化
【发布时间】:2013-11-20 12:28:15
【问题描述】:

我有这样的代码:

void f()
{
  //Some function I want to debug
  g();
  //More code
}
void g()
{
  //A very slow function I want to have optimized for performance
  //No debugging this code
}

其中 f 是我要调试的代码中的任何函数,而 g 是计算密集型函数。

当我使用 Release 配置编译代码时,两段代码都得到了优化,并且它们都在合理的时间内运行,但是当我使用 Debug 配置编译时,然后g 执行时间过长,因为编译器不会优化代码以使其对调试器友好。

我不需要从调试的角度处理 g 并且不能将其提取到预编译模块中(它正在积极开发中,需要保持最新) .它们在不同的文件中定义。

有没有办法告诉 Visual Studio 编译 g 以提高速度,同时保持 f 使用调试配置编译?

【问题讨论】:

  • 你怎么知道不需要调试g()
  • 你可以使用#pragma optimize指令。
  • @RowlandShaw:已经独立测试验证过,所以调试和f的开发无关,所以我只想把它当成一个优化的黑盒。
  • 为什么要调试f?你不能存根g 并测试f 吗?
  • @doctorlove:存根可能是要走的路,至少从测试的角度来看是这样。这个问题更多来自对如何使用不同的编译配置(优化级别或其他)编译代码的不同部分的好奇心。正如 Alex 所说,我喜欢 #pragma 方法。

标签: c++ visual-studio debugging compiler-construction visual-studio-debugging


【解决方案1】:

您可以将f 移动到另一个编译单元,例如另一个文件或#pragma optimize. 后者可能是更好的选择,因为与更改特定文件的编译设置相比,忘记你设置它更难,你必须记住要返回并重置。

或者您可以在调试模式下进行分析并查看发生了什么。由于 VS Premium 及更高版本包含这些工具,这些工具应该不会太难,或者您可以使用第三方工具。分析通常可以很好地了解任何减速的真正原因。

【讨论】:

  • #pragma optimize 是我一直在寻找的。我以前使用过分析器,但我现在并没有真正分析性能。谢谢
  • 信用应得的信用@AlexFarber 指出了这一点,我以前看过但忘记了。
猜你喜欢
  • 2014-05-21
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
相关资源
最近更新 更多