在开发过程中死循环通常有两种写法
// 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)
更为简洁。