最好的无限循环

iSe*_*ult 6 c optimization loops infinite

可能重复:
while(1)Vs. for(;;)有速度差吗?

嗨,

哪种更好,更快,更优化的方式来实现无限循环 - for(;;)或while(1)?为什么?

Mar*_*ers 47

我更喜欢for(;;)因为它没有测试任何东西而且在语义上这就是你的意思.如果1为真,那么继续测试没有多大意义.但是,任何专业的C程序员都应该立即识别这两个惯用语.

就实际表现而言,应该没有区别.编译器将优化测试.

我试过测试两者看哪个更快但它们都没有完成.

  • 也许等一会儿......? (23认同)
  • ++只是为了最后一句;-) (12认同)
  • 我假设在语义上`while(true)`是正确的,或者`for(ever)`如果你想滥用预处理器:) (3认同)

Eli*_*sky 18

在任何普通的编译器中,应该绝对没有区别.例如,这是LLVM-clang生成(带有-O3标志)的内容while (1) {}:

    .file   "test.c"
    .text
    .globl  main
    .align  16, 0x90
    .type   main,@function
main:
    pushl   %ebp
    movl    %esp, %ebp
    .align  16, 0x90
.LBB0_1:
    jmp .LBB0_1
Run Code Online (Sandbox Code Playgroud)

注意jmp .LBB0_1部分,这是实际的无限循环.对于for (;;)那种,它生成完全相同的代码.

您也可以尝试与其他编译器一起玩,但最好不要担心它.


好的,我只需要尝试一下gcc:

    .file   "test.c"
    .text
.globl main
    .type   main, @function
main:
    pushl   %ebp
    movl    %esp, %ebp
.L2:
    jmp .L2
Run Code Online (Sandbox Code Playgroud)