When I tried to check the speed of the execution of functions, I found that not all parts of my code work in Release mode. However, the same code works fine in Debug mode.
I am using a VC ++ compiler with /O2 optimization.
Here is cut out the part that does not work.
int main() { boost::timer::auto_cpu_timer t; for(int i = 0; i < 1000000; i++) gcdb(i, 5); return 0; }
Generated assembly in release mode, the code for the for loop is absent only in this mode.
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() is just a function to find the GCD of two numbers.
What could be the reason for skipping this code?
source share