sementara (1) lwn. untuk (;;): Adakah Terdapat Perbezaan Kelajuan?
Soalan:
Adakah menggunakan while (1) dan bukannya untuk (;;) menghasilkan perbezaan prestasi dalam gelung tak terhingga?
Jawapan:
Dalam kebanyakan penyusun moden, tiada perbezaan prestasi antara while (1) dan untuk (;;).
Penjelasan:
Berikut ialah analisis teknikal tentang cara gelung ini dilaksanakan dalam penyusun:
Perl:
Kedua-dua sementara (1) dan untuk (;;) menghasilkan opcode yang sama, seperti yang ditunjukkan oleh perl -MO=Output ringkas :
<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:
Dalam GCC, kedua-dua gelung menyusun kepada kod pemasangan yang sama, seperti yang ditunjukkan di bawah:
<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>
Oleh itu , dalam kebanyakan kes, tidak perlu memilih satu daripada yang lain berdasarkan kebimbangan prestasi. Pilihan boleh berdasarkan kebolehbacaan kod atau faktor lain.
Atas ialah kandungan terperinci \'sementara (1) lwn. untuk (;;): Adakah Pengoptimuman Pengkompil Menghapuskan Perbezaan Prestasi?\'. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!