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中文網其他相關文章!