Heim >Backend-Entwicklung >C++ >Ist `
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:
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!