Ist Vergleich '<' Schneller als „<=“?
In bestimmten Szenarien mit komplexem Schleifencode wurde vorgeschlagen, dass „<“ Der Operator ist möglicherweise schneller als der Operator „<=“. Um dieser Behauptung nachzugehen, untersuchen wir den zugrunde liegenden Maschinencode, der für diese Vergleiche generiert wurde.
Codegenerierung
Auf x86-Architekturen werden Integralvergleiche typischerweise mithilfe von zwei Maschinenanweisungen implementiert:
Für beide '<' und '<='-Vergleiche ist die erste Anweisung (ein cmp) identisch. Der Unterschied liegt in der zweiten Anweisung:
Ausführungszeit
Die Ausführungszeit wird sowohl von der Latenz als auch von der Latenz bestimmt Durchsatz. Im Fall von jge- und jg-Anweisungen haben sie die gleiche Latenz von null Zyklen und einen Durchsatz von 0,5 Zyklen. Dies bedeutet, dass die Ausführung genauso lange dauert.
Gleitkommavergleiche
Die gleichen Prinzipien gelten für x87-Gleitkommavergleiche mit der fucomip-Anweisung. Die zur Überprüfung des EFLAGS-Registers verwendeten Seta- und Setae-Anweisungen benötigen ebenfalls die gleiche Zeit zur Ausführung.
Fazit
Auf den meisten Architekturen ist das „<“ und „<=“-Operatoren haben identische Ausführungszeiten für Integral- und Gleitkommavergleiche. Die Annahme, dass „<“ könnte schneller sein, ist im allgemeinen Fall falsch.
Das obige ist der detaillierte Inhalt vonIst das '. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!