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

作者: CoderBigBear | 来源:发表于2018-07-31 11:39 被阅读34次

总结 for(;;) 比 while(true) 好


为啥:如下(底层完全不同)

“死循环”有两种写法:for(;;)和while(true),
两者有啥区别,为啥源码中多数是for( ; ; )这种形式的,

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

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

对比之下,for (;;)指令少,不占用寄存器,而且没有判断跳转,比while (1)好。

也就是说两者在在宏观上完全一样的逻辑,但是底层完全不一样,for相对于来说更加简洁明了。

相关文章

网友评论

  • DarkBubble:如果循环体简单的话建议用for(;;),如果循环体比较大,强烈建议用while(true)
    DarkBubble:for(;;)的性能开销优势在循环体简单的情况下可能比较重要,但循环体复杂(大)的时候语义清晰性更重要。
    shUID:@DarkBubble 为啥
  • markRao:还有一个关键性的问题,while(true)是可以通过反射改变true的值,基于系统层的安全性
    markRao:@DarkBubble 😄😄😄
    DarkBubble:这个……属于骚操作
  • 胶布小子:编译器貌似可以优化的
    DarkBubble:一般来说意义不大

本文标题:for(;;)和while(true)的区别

本文链接:https://www.haomeiwen.com/subject/iewcvftx.html