哪个循环在C中更快?while循环或do-while循环

Hab*_*wad 0 c loops while-loop do-while

在某些情况下,我们可以互换使用while循环或do-while循环.我的一位朋友告诉我,这种情况我们应该使用do-while循环.因为它比同时更快.任何人都可以给我证明吗?

Alo*_*ave 6

你正在比较苹果和桃子.

A do-whilewhile循环在它们提供的功能上有所不同.
do-while总是执行一次,while只有在条件为真时才执行.

在您可以使用的情况下,没有性能差异.
如果您有疑问,那么在您的平台上自行分析它或分析两者的汇编输出就是您应该做的.


MBy*_*ByD 6

两个循环几乎相同(除了do-while至少执行一次这一事实),并且在许多情况下编译为相同的指令,至少在x86上.

以下代码:

int main(int argv, char *argc[]) {
    int a = 0;
    while (a < 100) {
        a++;
    }
    a = 0;
    do {
        a++;
    }while(a < 100);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

生成此程序集(使用gcc -S -o temp.as temp.c):

_main:
    pushl   %ebp
    movl    %esp, %ebp
    andl    $-16, %esp
    subl    $16, %esp
    call    ___main
    movl    $0, 12(%esp) >> while
    jmp L2  
L3:
    addl    $1, 12(%esp)
L2:
    cmpl    $99, 12(%esp)
    jle L3
    movl    $0, 12(%esp)  >> do-while
L4:
    addl    $1, 12(%esp) 
    cmpl    $99, 12(%esp)
    jle L4
    movl    $0, %eax
    leave
    ret
Run Code Online (Sandbox Code Playgroud)

  • 执行一次的一个分支不是你应该考虑的东西.很少被认为是一个缓慢的因素.它只在第一次发生. (2认同)