当试图测试函数的速度时,我发现我的代码并非全部工作在Release
模式。不过,相同的代码在Debug
模式下完美工作。发布模式跳过代码部分
我正在使用VC++编译器与/O2
优化。
下面是切出的部分,它不起作用。
int main()
{
boost::timer::auto_cpu_timer t;
for(int i = 0; i < 1000000; i++)
gcdb(i, 5);
return 0;
}
在发布模式下生成的程序集,for循环的代码仅在此模式下丢失。
int main()
{
000000013F8E1280 sub rsp,88h
000000013F8E1287 mov rax,qword ptr [__security_cookie (013F8E7150h)]
000000013F8E128E xor rax,rsp
000000013F8E1291 mov qword ptr [rsp+70h],rax
boost::timer::auto_cpu_timer t;
000000013F8E1296 lea rcx,[t]
000000013F8E129B mov edx,6
000000013F8E12A0 call boost::timer::auto_cpu_timer::auto_cpu_timer (013F8E2DA0h)
for(int i = 0; i < 1000000; i++)
gcdb(i, 5);
return 0;
000000013F8E12A5 lea rcx,[t]
000000013F8E12AA call boost::timer::auto_cpu_timer::~auto_cpu_timer (013F8E2810h)
000000013F8E12AF xor eax,eax
}
gcdb()
只是找到两个数字的GCD的函数。
什么可能导致此代码跳过?
编译器优化它,不是一个好理由吗? – 2012-01-27 17:16:47
我是否可以避免优化那部分? – SMK 2012-01-27 17:19:20
尝试在循环外声明一个变量并为其分配'gcdb()'的结果。 – lapk 2012-01-27 17:22:00