Ist `

Linda Hamilton
Linda HamiltonOriginal
2024-12-22 18:29:14186Durchsuche

Is `

Ist < Schneller als <=?

In einer typischen if-Anweisung mit dem Vergleichsoperator < oder <=, es könnte angenommen werden, dass < wäre schneller, weil es einen einzigen Schritt oder eine einzige Grenze hat. Diese Annahme ist jedoch falsch. Die Auswirkungen auf die Leistung sind vernachlässigbar.

Maschinelle Codegenerierung

Auf den meisten Architekturen, einschließlich x86, verwenden integrale Vergleiche die folgenden Maschinenanweisungen:

  • Eine Test- oder CMP-Anweisung, die das EFLAGS-Register ändert
  • Eine Sprunganweisung (Jcc) basierend auf dem Vergleich Typ

Die Sprunganweisungen umfassen jne (Springen, wenn nicht gleich), jz (Springen, wenn Null), jg (Springen, wenn größer) und andere.

Beispielcode

Bedenken Sie Folgendes Beispiel:

if (a < b) {
    // Do something 1
}

und

if (a <= b) {
    // Do something 2
}

Beim Vergleich des von einem Compiler generierten Assemblercodes sehen wir einen Unterschied zwischen den verwendeten Sprunganweisungen: jge versus 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

Daher besteht der einzige Unterschied im Maschinencode in der Sprunganweisung, die angibt, dass der Vergleich selbst die gleiche Menge an Zeit in Anspruch nimmt Zeit.

Gleitkomma

Das gleiche Prinzip gilt für x87-Gleitkommavergleiche. Der Compiler generiert für beide < die gleiche Anzahl an Anweisungen. und <= Vergleiche.

Schlussfolgerung

Trotz des Unterschieds in der Anzahl der Operatoren (< versus <=) ist der Leistungsunterschied bei Integralvergleichen unbedeutend auf den meisten Architekturen. Die verwendeten Sprunganweisungen (jge und jg) benötigen zur Ausführung die gleiche Zeit. Das Gleiche gilt für Gleitkommavergleiche.

Das obige ist der detaillierte Inhalt vonIst `. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn