死循环的有两种写法
for(; ;);
while(true); // while(1)
两者有何区别,为何在源码中多以for(; ;)
形式居多?
对两条语句分别进行编译结果如下:
// 编译前
while(1);
//编译后
mov eax, 1
test eax, eax
je foo+23h
jmp foo+18h
// 编译前
for(; ;);
// 编译后
jmp foo+23h
通过对两者分别编译后对比,for(; ;)
语句不仅指令少、不占用寄存器,还没有跳转判断指令,比while(1)
好。
总结
for(; ;)
和while(1)
两者在语法使用层面表现出完全一样的逻辑,但是两者的底层实现截然不同,相比之下for(; ;)
比while(1)
更为简洁。