C语言优化if else,c语言if-else的效率比较

闲着没事测试下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%ebp

LCFI0:

movl%esp, %ebp

LCFI1:

subl$16, %esp

movl$100000000, -4(%ebp)

movl$-1, -8(%ebp)

movl$0, -12(%ebp)

jmpL2

L22:

cmpl$0, -8(%ebp)

jnsL3

subl$1, -8(%ebp)

jmpL4

L3:

subl$1, -8(%ebp)

L4:

cmpl$0, -8(%ebp)

jnsL5

subl$1, -8(%ebp)

jmpL6

L5:

subl$1, -8(%ebp)

L6:

cmpl$0, -8(%ebp)

jnsL7

subl$1, -8(%ebp)

jmpL8

L7:

subl$1, -8(%ebp)

L8:

cmpl$0, -8(%ebp)

jnsL9

subl$1, -8(%ebp)

jmpL10

L9:

subl$1, -8(%ebp)

L10:

cmpl$0, -8(%ebp)

jnsL11

subl$1, -8(%ebp)

jmpL12

L11:

subl$1, -8(%ebp)

L12:

cmpl$0, -8(%ebp)

jnsL13

subl$1, -8(%ebp)

jmpL14

L13:

subl$1, -8(%ebp)

L14:

cmpl$0, -8(%ebp)

jnsL15

subl$1, -8(%ebp)

jmpL16

L15:

subl$1, -8(%ebp)

L16:

cmpl$0, -8(%ebp)

jnsL17

subl$1, -8(%ebp)

jmpL18

L17:

subl$1, -8(%ebp)

L18:

cmpl$0, -8(%ebp)

jnsL19

subl$1, -8(%ebp)

jmpL20

L19:

subl$1, -8(%ebp)

L20:

cmpl$0, -8(%ebp)

jnsL21

subl$1, -8(%ebp)

jmpL2

L21:

subl$1, -8(%ebp)

L2:

movl-4(%ebp), %eax

leal-1(%eax), %edx

movl%edx, -4(%ebp)

testl%eax, %eax

jgL22

movl$0, %eax

leave

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%ebp

LCFI0:

movl%esp, %ebp

LCFI1:

subl$16, %esp

movl$100000000, -4(%ebp)

movl$-1, -8(%ebp)

movl$0, -12(%ebp)

jmpL2

L22:

cmpl$0, -8(%ebp)

jleL3

subl$1, -8(%ebp)

jmpL4

L3:

subl$1, -8(%ebp)

L4:

cmpl$0, -8(%ebp)

jleL5

subl$1, -8(%ebp)

jmpL6

L5:

subl$1, -8(%ebp)

L6:

cmpl$0, -8(%ebp)

jleL7

subl$1, -8(%ebp)

jmpL8

L7:

subl$1, -8(%ebp)

L8:

cmpl$0, -8(%ebp)

jleL9

subl$1, -8(%ebp)

jmpL10

L9:

subl$1, -8(%ebp)

L10:

cmpl$0, -8(%ebp)

jleL11

subl$1, -8(%ebp)

jmpL12

L11:

subl$1, -8(%ebp)

L12:

cmpl$0, -8(%ebp)

jleL13

subl$1, -8(%ebp)

jmpL14

L13:

subl$1, -8(%ebp)

L14:

cmpl$0, -8(%ebp)

jleL15

subl$1, -8(%ebp)

jmpL16

L15:

subl$1, -8(%ebp)

L16:

cmpl$0, -8(%ebp)

jleL17

subl$1, -8(%ebp)

jmpL18

L17:

subl$1, -8(%ebp)

L18:

cmpl$0, -8(%ebp)

jleL19

subl$1, -8(%ebp)

jmpL20

L19:

subl$1, -8(%ebp)

L20:

cmpl$0, -8(%ebp)

jleL21

subl$1, -8(%ebp)

jmpL2

L21:

subl$1, -8(%ebp)

L2:

movl-4(%ebp), %eax

leal-1(%eax), %edx

movl%edx, -4(%ebp)

testl%eax, %eax

jgL22

movl$0, %eax

leave执行结果:

bde8f2585ee4d53234d7445ec42edc78.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值