При попытке проверить скорость функций я обнаружил, что не все части моего кода работают в режиме 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 двух чисел.
Что может быть причиной пропуска этого кода?