首页 >后端开发 >C++ >\'while (1) 与 for (;;):编译器优化是否消除了性能差异?\”

\'while (1) 与 for (;;):编译器优化是否消除了性能差异?\”

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-31 22:18:29222浏览

while (1) 与 for (;;):有速度差异吗?

问题:

使用 while (1) 代替 for (;;) 会导致无限循环中的性能差异吗?

答案:

在大多数情况下现代编译器,while (1) 和 for (;;) 之间没有性能差异。

说明:

下面是这些循环如何实现的技术分析在编译器中:

Perl:

while (1) 和 for (;;) 都会产生相同的操作码,如 perl -MO=Concise 输出所示:

<code class="shell">a  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 2 -e:1) v ->3
9     <2> leaveloop vK/2 ->a
3        <{> enterloop(next->8 last->9 redo->4) v ->4
-        <@> lineseq vK ->9
4           <;> nextstate(main 1 -e:1) v ->5
7           <@> print vK ->8
5              <0> pushmark s ->6
6              <$> const[PV "foo\n"] s ->7
8           <0> unstack v ->4
-e syntax OK</code>

GCC:

在 GCC 中,两个循环都编译成相同的汇编代码,如下所示:

<code class="assembly">.globl t_while
t_while:
.L2:
    movl    $.LC0, %edi
    call    puts
    jmp .L2
.globl t_for
t_for:
.L5:
    movl    $.LC0, %edi
    call    puts
    jmp .L5</code>

因此,在大多数情况下,无需基于性能考虑而选择其中一种。选择可以基于代码可读性或其他因素。

以上是\'while (1) 与 for (;;):编译器优化是否消除了性能差异?\”的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn