区别一:for式死循环更加高效
for(; ; )里面的; ; 表示两个空语句,一般会被编译器优化掉,直接进入循环体,不做判断。
while(1)里面的1会被当做表达式,每次循环都要判断一次。
在开启多线程时,二者差异就会体现出来,while式死循环存在判断环节,导致线程之间出现运行差异,for式死循环则不会影响,理论上线程保持同时运行。
区别二:编译后的程序代码大小不同
编译前 编译后
while (1); mov eax,1
test eax,eax
je foo+23h
jmp foo+18h
编译前 编译后
for (;;); jmp foo+23h