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

版权声明:转载请声明 https://blog.csdn.net/qq_40732350/article/details/82529465

再看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

猜你喜欢

转载自blog.csdn.net/qq_40732350/article/details/82529465
今日推荐