welcome

[C++] 循环for(;;)和while(true)的区别

原文链接:
https://blog.csdn.net/qq_39345059/article/details/78266526
https://blog.csdn.net/qq_40732350/article/details/82529465

使用for循环和while循环都可以去实现,那么到底两者之间有什么区别?

1.从内存角度考虑:

  • 局部变量在栈内存中存在,当for循环语句结束,那么变量会及时被gc(垃圾回收器)及时的释放掉,不浪费空间。
  • 如果使用循环之后还想去访问循环语句中控制那个变量,使用while循环。
  1. 从应用场景角度考虑:
  • 如果一个需求明确循环的次数,那么使用for循环(开发中使用for循环的几率大于while循环)。
  • 如果一个需求,不知道循环了多少次,使用while循环。

在看JDK源码的时候发现,“死循环”有两种写法: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相对于来说更加简洁明了。
但是在ARM上,这两个无差别 arm-linux-gcc -S -o  d.S 4.c,都是:

L2:
    b  .L2
posted @ 2019-09-29 16:17  winng  阅读(811)  评论(0)    收藏  举报

到底了 > . <