一、 背景
今天在网上看到一篇blog,文章题目是《C代码优化方案》,其中有一节说到while(1)和for(;;)两种无线循环,哪种效率更高?
但是,在现代编译器上,其实两种无线循环效率都是一样的。
二、 以前为什么会出现for(;;)比while(1)的无线循环的效率高呢?
在《C代码优化方案》中,这样写道:
在编程中,我们常常需要用到无限循环,常用的两种方法是while (1) 和 for (;;)。这两种方法效果完全一样,但那一种更好呢?然我们看看它们编译后的代码:
编译前:
while (1);
编译后:
mov eax,1
test eax,eax
je foo+23h
jmp foo+18h
编译前:
for (;;);
编译后:
jmp foo+23h
显然,for (;;)指令少,不占用寄存器,而且没有判断、跳转,比while (1)好。这是因为以前的编译器对这两种无线循环的编译处理不一致造成的。
三、 现代编译器(gcc-4.1.1-52-e15)对这两种无线循环的影响?
先看for.c
#include
#include
#include
int main()
{
for(;;);</