用for 还是用while

本文通过将for与while循环编译为汇编代码的方式,详细对比了两者之间的效率差异,并揭示了do...while循环在某些情况下的更高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先比较for与while的效率问题必须保证循环次数一致

下面简单的分析for与while的效率问题就从最简单的无限循环开始,其余相同:

 


 
  1. for(;;){

  2. }


 
  1. while(1){

  2. }

这两句都实现了无限循环的功能,使用gcc编译成汇编代码为:

for:

 


 
  1. .file "for.c"

  2. .text

  3. .globl main

  4. .type main, @function

  5. main:

  6. .LFB0:

  7. .cfi_startproc

  8. pushq %rbp

  9. .cfi_def_cfa_offset 16

  10. .cfi_offset 6, -16

  11. movq %rsp, %rbp

  12. .cfi_def_cfa_register 6

  13. .L2:

  14. jmp .L2

  15. .cfi_endproc

  16. .LFE0:

  17. .size main, .-main

  18. .ident "GCC: (Ubuntu 4.9.2-10ubuntu13) 4.9.2"

  19. .section .note.GNU-stack,"",@progbits


 

while:

 


 
  1. .file "while.c"

  2. .text

  3. .globl main

  4. .type main, @function

  5. main:

  6. .LFB0:

  7. .cfi_startproc

  8. pushq %rbp

  9. .cfi_def_cfa_offset 16

  10. .cfi_offset 6, -16

  11. movq %rsp, %rbp

  12. .cfi_def_cfa_register 6

  13. .L2:

  14. jmp .L2

  15. .cfi_endproc

  16. .LFE0:

  17. .size main, .-main

  18. .ident "GCC: (Ubuntu 4.9.2-10ubuntu13) 4.9.2"

  19. .section .note.GNU-stack,"",@progbits

可见除了文件名不同外,其余全部相同,并且都是执行一次跳转jmp。两种循环效率一样高。

参考:

一般来说,do..while循环要比for,while循环效率要高,从汇编代码中可以看出,在深入理解计算机3.6.5节中可以看出,进行汇编时,会先将for,while转换为do...while

总结:

for循环习惯写法for(int i=0;i<num;i++)执行效率低于for(;(num-->0);)而for(;(num-->0);)写法效率与while((num-->0))相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值