首頁  >  文章  >  後端開發  >  \“while (1) 與 for (;;):編譯器最佳化是否消除了效能差異?\”

\“while (1) 與 for (;;):編譯器最佳化是否消除了效能差異?\”

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-31 22:18:29134瀏覽

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