Hab*_*wad 0 c loops while-loop do-while
在某些情况下,我们可以互换使用while循环或do-while循环.我的一位朋友告诉我,这种情况我们应该使用do-while循环.因为它比同时更快.任何人都可以给我证明吗?
你正在比较苹果和桃子.
A do-while和while循环在它们提供的功能上有所不同.
do-while总是执行一次,while只有在条件为真时才执行.
在您可以使用的情况下,没有性能差异.
如果您有疑问,那么在您的平台上自行分析它或分析两者的汇编输出就是您应该做的.
两个循环几乎相同(除了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)