Test the if-else execution efficiency.
Test environment: Mac pro i7 2.3 Ghz... Gcc 4.9 compiler, code not optimized-O0;
Test code: c code 1:
int main(){int n=100000000;int b=-1;int a=0;while(n-->0){if(b<0) b--;else b--;if(b<0) b--;else b--;if(b<0) b--;else b--;if(b<0) b--;else b--;if(b<0) b--;else b--;if(b<0) b--;else b--;if(b<0) b--;else b--;if(b<0) b--;else b--;if(b<0) b--;else b--;if(b<0) b--;else b--;}return 0;}
Assembly Code 1:
_main:LFB0:pushl%ebpLCFI0:movl%esp, %ebpLCFI1:subl$16, %espmovl$100000000, -4(%ebp)movl$-1, -8(%ebp)movl$0, -12(%ebp)jmpL2L22:cmpl$0, -8(%ebp)jnsL3subl$1, -8(%ebp)jmpL4L3:subl$1, -8(%ebp)L4:cmpl$0, -8(%ebp)jnsL5subl$1, -8(%ebp)jmpL6L5:subl$1, -8(%ebp)L6:cmpl$0, -8(%ebp)jnsL7subl$1, -8(%ebp)jmpL8L7:subl$1, -8(%ebp)L8:cmpl$0, -8(%ebp)jnsL9subl$1, -8(%ebp)jmpL10L9:subl$1, -8(%ebp)L10:cmpl$0, -8(%ebp)jnsL11subl$1, -8(%ebp)jmpL12L11:subl$1, -8(%ebp)L12:cmpl$0, -8(%ebp)jnsL13subl$1, -8(%ebp)jmpL14L13:subl$1, -8(%ebp)L14:cmpl$0, -8(%ebp)jnsL15subl$1, -8(%ebp)jmpL16L15:subl$1, -8(%ebp)L16:cmpl$0, -8(%ebp)jnsL17subl$1, -8(%ebp)jmpL18L17:subl$1, -8(%ebp)L18:cmpl$0, -8(%ebp)jnsL19subl$1, -8(%ebp)jmpL20L19:subl$1, -8(%ebp)L20:cmpl$0, -8(%ebp)jnsL21subl$1, -8(%ebp)jmpL2L21:subl$1, -8(%ebp)L2:movl-4(%ebp), %eaxleal-1(%eax), %edxmovl%edx, -4(%ebp)testl%eax, %eaxjgL22movl$0, %eaxleave
C Code 2:
int main(){int n=100000000;int b=-1;int a=0;while(n-->0){if(b>0) b--;else b--;if(b>0) b--;else b--;if(b>0) b--;else b--;if(b>0) b--;else b--;if(b>0) b--;else b--;if(b>0) b--;else b--;if(b>0) b--;else b--;if(b>0) b--;else b--;if(b>0) b--;else b--;if(b>0) b--;else b--;}return 0;}
Assembly Code 2:
_main:LFB0:pushl%ebpLCFI0:movl%esp, %ebpLCFI1:subl$16, %espmovl$100000000, -4(%ebp)movl$-1, -8(%ebp)movl$0, -12(%ebp)jmpL2L22:cmpl$0, -8(%ebp)jleL3subl$1, -8(%ebp)jmpL4L3:subl$1, -8(%ebp)L4:cmpl$0, -8(%ebp)jleL5subl$1, -8(%ebp)jmpL6L5:subl$1, -8(%ebp)L6:cmpl$0, -8(%ebp)jleL7subl$1, -8(%ebp)jmpL8L7:subl$1, -8(%ebp)L8:cmpl$0, -8(%ebp)jleL9subl$1, -8(%ebp)jmpL10L9:subl$1, -8(%ebp)L10:cmpl$0, -8(%ebp)jleL11subl$1, -8(%ebp)jmpL12L11:subl$1, -8(%ebp)L12:cmpl$0, -8(%ebp)jleL13subl$1, -8(%ebp)jmpL14L13:subl$1, -8(%ebp)L14:cmpl$0, -8(%ebp)jleL15subl$1, -8(%ebp)jmpL16L15:subl$1, -8(%ebp)L16:cmpl$0, -8(%ebp)jleL17subl$1, -8(%ebp)jmpL18L17:subl$1, -8(%ebp)L18:cmpl$0, -8(%ebp)jleL19subl$1, -8(%ebp)jmpL20L19:subl$1, -8(%ebp)L20:cmpl$0, -8(%ebp)jleL21subl$1, -8(%ebp)jmpL2L21:subl$1, -8(%ebp)L2:movl-4(%ebp), %eaxleal-1(%eax), %edxmovl%edx, -4(%ebp)testl%eax, %eaxjgL22movl$0, %eaxleave
Execution result:
It seems that else execution is more efficient ....