c语言if-else的效率比较

来源:互联网 发布:match sql语句 编辑:程序博客网 时间:2024/04/30 01:31

          闲着没事测试下if-else的执行效率

测试环境:Mac pro i7 2.3Ghz 。。。编译器gcc 4.9,代码没有进行优化-O0;

测试代码:c代码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;}

汇编代码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代码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;}

汇编代码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
执行结果:


看来else执行的效率高一些。。。。

2 0
原创粉丝点击