转自:
https://blog.csdn.net/qq_39345059/article/details/78266526
https://blog.csdn.net/qq_40732350/article/details/82529465
使用for循环和while循环都可以去实现,那么到底两者之间有什么区别?
1.从内存角度考虑:
- 局部变量在栈内存中存在,当for循环语句结束,那么变量会及时被gc(垃圾回收器)及时的释放掉,不浪费空间。
- 如果使用循环之后还想去访问循环语句中控制那个变量,使用while循环。
- 从应用场景角度考虑:
- 如果一个需求明确循环的次数,那么使用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
网友评论