这几天看到老友的文章关于while(1)和for(;;)功率的评论,手痒说了两句。回头一深思,自己也仅仅揣度。没有做任何试验,咱们就看看这两种写法到底有什么差异:
试验环境:IAR EWARM 5.2
我就随便在一个嵌入式项目上做文章了,首要工程C言语编译优化挑选了None, 输出挑选带汇编输出,输出的汇编文件和C言语对应上。
我在main函数里先用for(;;)写了个死循环,咱们看看编译成果:
留意main.c生成了一个对应的main.s
能够看到,是用一条跳转指令直接代替的for (;;)。
再更改一下代码:
编译一下看成果:
while(1)的循环也是一句跳转指令所代替。
IAR EWARM 5.2下,可见 for(;;)和while(1)在未开优化代码级别下,彻底相同。无任何差异。
咱们再来看看 linux 下的arm-rtems4.9-gcc的成果: