Adakah `

Linda Hamilton
Lepaskan: 2024-12-22 18:29:14
asal
200 orang telah melayarinya

Is `

Adakah < Lebih pantas daripada <=?

Dalam pernyataan if biasa menggunakan operator perbandingan < atau <=, mungkin diandaikan bahawa < akan menjadi lebih pantas kerana ia mempunyai satu langkah atau terikat. Namun, andaian ini tidak betul. Kesan prestasi boleh diabaikan.

Penjanaan Kod Mesin

Pada kebanyakan seni bina, termasuk x86, perbandingan integral menggunakan arahan mesin berikut:

  • Arahan ujian atau cmp yang mengubah suai daftar EFLAGS
  • Arahan lompat (Jcc) berdasarkan jenis perbandingan

Arahan lompat termasuk jne (Lompat jika tidak sama), jz (Lompat jika sifar), jg (Lompat jika lebih besar), dan lain-lain.

Kod Contoh

Pertimbangkan perkara berikut contoh:

if (a < b) {
    // Do something 1
}
Salin selepas log masuk

dan

if (a <= b) {
    // Do something 2
}
Salin selepas log masuk

Membandingkan kod pemasangan yang dijana oleh pengkompil, kita melihat perbezaan antara arahan lompat yang digunakan: jge berbanding jg.

if (a < b)
mov eax, [a]
cmp eax, [b]
jge .L2
// Do something 1

if (a <= b)
mov eax, [a]
cmp eax, [b]
jg .L5
// Do something 2
Salin selepas log masuk

Oleh itu, satu-satunya perbezaan dalam kod mesin ialah arahan lompat, menunjukkan bahawa perbandingan itu sendiri mengambil jumlah yang sama masa.

Titik Terapung

Prinsip yang sama digunakan untuk perbandingan titik terapung x87. Pengkompil menjana bilangan arahan yang sama untuk kedua-dua < dan <= perbandingan.

Kesimpulan

Walaupun terdapat perbezaan dalam bilangan operator (< berbanding <=), perbezaan prestasi dalam perbandingan integral adalah tidak ketara pada kebanyakan seni bina. Arahan lompat yang digunakan (jge dan jg) mengambil masa yang sama untuk dilaksanakan. Perkara yang sama berlaku untuk perbandingan titik terapung.

Atas ialah kandungan terperinci Adakah `. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan