for(;;)与while(true)的区别


在开发过程中死循环通常有两种写法

// 1、while的写法
  while(true){
      ...
  }  
 
// 2、 for(;;)的写法
  for(;;){
      ...
  }
    

那么两者有何区别,为何在源码中多以for(; ;)形式居多?

要搞清楚它们的区别从代码的角度来说他们的执行过程几乎是一模一样的,但是它们编译后的结果却差别巨大

首先我们看一下while编译后的结果

// 编译前
while(1);
//编译后
mov eax, 1
test eax, eax
je foo+23h
jmp foo+18h

再来看看for编译后的结果

// 编译前
for(; ;);
// 编译后
jmp foo+23h

通过两者分别编译后的结果对比可知,for(; ;)语句不仅指令少、不占用寄存器,还没有跳转判断指令,比while(1)好。

总结

for(; ;)while(1)两者在语法使用层面表现出完全一样的逻辑,但是两者的底层实现截然不同,相比之下for(; ;)while(1)更为简洁。


文章作者: wumangeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wumangeng !
  目录