, die vollständig auf dem ISA hängt für Sie zusammenzustellen, und die Qualität des Compilers des Optimierers. Nicht vorzeitig optimieren: Profil zuerst, um Ihre Engpässe zu finden.
Das heißt, in x86 werden Sie feststellen, dass beide in den meisten Fällen gleich schnell sind. In beiden Fällen haben Sie einen Vergleich (cmp
) und einen bedingten Sprung (jCC
) Anweisungen. Jedoch kann es für (x < 0)
einige Fälle geben, in denen der Compiler die cmp
-Anweisung beenden kann, indem er Ihren Code um einen ganzen Zyklus beschleunigt.
Insbesondere dann, wenn der Wert x
in einem Register gespeichert ist, und vor kurzem war das Ergebnis einer Rechenoperation (wie add
oder sub
, aber es gibt viele andere Möglichkeiten), die den Vorzeichen-Flag SF in den EFLAGS Registersatz, dann gibt es keine Notwendigkeit für die cmp
Anweisung, und der Compiler kann nur eine js
Anweisung ausgeben. Es gibt keine einfache jCC
Anweisung, die springt, wenn die Eingabe -1 ist.
Um auf solche niedrigen Ebenen Überlegungen zu beantworten, wäre die CPU-Architektur ein minimaler Teil von Informationen, meinst du nicht? Aber selbst dann wäre eine CPU, die für diese Bedingungen eine unterschiedliche Anzahl von Zyklen benötigt, ziemlich primitiv. – joelr
Auf jeder einigermaßen modernen CPU (innerhalb des letzten Jahrzehnts oder so) würde ich überrascht sein, wenn jeder 32-Bit-Ganzzahlvergleich mehr als einen Zyklus benötigte. – Eddie
Warum ist das eine schlechte Frage? Eine gründliche Antwort davon lässt alles mit einem viel besseren Verständnis der Funktionsweise von Prozessoren und solchen Dingen einhergehen. Ist das nicht gut? –