我试图分析一个特定的函数,但发现在发布模式下编译器(非常正确!)决定删除我无用的时序代码:
DWORD dwStart = GetTickCount();
DWORD dwTmp = 0;
for (int nLoop=0; nLoop<1000; nLoop++)
dwTmp = SomeFunction();
DWORD dwElapsed = (GetTickCount() - dwStart);
LogTime(dwElapsed);
这在DEBUG模式下工作正常(如果我将循环更改为2000,那么它需要大约两倍的时间)。是否有一个简单的技巧或本地编译器开关,我可以使用它暂时欺骗或强制编译器在RELEASE模式下运行此代码?
答案 0 :(得分:2)
您可以使用pragma optimize。
然而,这似乎是一个想要解决的奇怪问题。 你的确切意图是什么?
答案 1 :(得分:0)
如果您只想在 RELEASE模式中运行这些线路,而在 DEBUG模式中寻找剩余的线路,据我所知,没有这样的事情,如果你只想在 RELEASE模式中运行你的整个资源并且不知道如何,遵循这些;
在Visual Studio的顶部单击构建向下单击配置管理器将项目的配置更改为重新连接和点击关闭。
答案 2 :(得分:0)
您可以尝试将dwTmp声明为volatile:这样,不允许编译器删除此变量的赋值。
答案 3 :(得分:0)
for (int nLoop=0; nLoop<1000; nLoop++)
dwTmp = SomeFunction();
如果函数SomeFunction
很简单,并且编译器可以猜测它的返回值,那么循环将被编译器消除,并且仅后面的语句将存在:
dwTmp = SomeFunction();
通常程序员在长执行函数上使用计时和其他分析来找出程序的哪个部分花费时间/内存/锁。你正在尝试一些非常不同的东西。