Hallo zusammen,
ich programmiere auf einen Fujitsu 16FX (16 bit) und habe eine (kleine)
grundsätzliche Frage - welche der beiden folgenden Vergleiche ist
schneller ? Ich stelle mir die Frage deshalb, weil im ersten Beispiel
ein exakter-, im zweiten ein "range"-Vergleich (">") gemacht wird. Der
erste ist aufgrund der else-Bedingung (genau die brauche ich) unschöner,
könnte mir aber vorstellen, dass die schneller ist !?
Wenn es auf den letzten Takt ankommt, dann nützen dir keine allgmeinen
Regeln mit Ausnahmen, sondern nur der konkrete Code. Also schau dir das
Ergebnis vom Compiler an.
Die Chancen stehen übrigens nicht schlecht, dass du mit der weniger
eleganten Version if(l_cnt|l_ovl) besser fährst als mit den beiden
Varianten oben (unter der Annahme, dass die Vars vorzeichenlos sind,
andernfalls wären deine Varianten nicht äquivalent).
Ich würde erwarten, daß beide gleich schnell sind. Es ist recht
wahrscheinlich, daß der generierte Code exakt gleich ist.
Sebastian L. schrieb:> Ich stelle mir die Frage deshalb, weil im ersten Beispiel> ein exakter-, im zweiten ein "range"-Vergleich (">") gemacht wird.
Und? Ich kenne jetzt den Prozessor nicht, aber warum sollten die
unterschiedlich schnell sein?
Hallo zusammen,
interessantes Thema offensichtlich. Wahrscheinlich nützt wirklich nur
der Blick in das übersetzte Programm - mache ich kommende Woche mal.
Warum ich auf die Idee gekommen bin, dass ein Range-Vergleich langsamer
sein könnte ? Auch wenn es nicht wirklich vergleichbar ist (ja, ich
weiss ;-) - bei MySQL (Datenbankserver) ist es so - da werden allerdings
nicht unmittelbar Variabeln vergleichen, sondern Datensätze.
Grüße,
Sebastian
Es gibt gibt tatsächlich Situationen, in denen < aufwendiger ist als ==,
und zwar bei Werten mit Vorzeichen und nicht ausgerechnet mit 0. Manche
Architekturen besitzen die dafür nötigen Vergleichsoperationen oder
Sprungbedingungen nicht (z.B. 8051).
Dein SQL Vergleich hinkt nicht mehr, der kriecht nur noch.
A. K. schrieb:> Die Chancen stehen übrigens nicht schlecht, dass du mit der weniger> eleganten Version if(l_cnt|l_ovl) besser fährst
Ist aber nicht gleichbedeutend mit if (l_cnt || l_ovl), zumindest wennes
um C/C++ geht: Falls l_ovl volatile ist, darf es nur ausgewertet werden,
wenn l_cnt false ist. Für l_cnt | l_ovl ist das anders, hier muss l_ovl
immer ausgewertet werden, damit die durch volatile angezeigten
Seiteneffekte zustande kommen.
Johann L. schrieb:> Ist aber nicht gleichbedeutend mit if (l_cnt || l_ovl), zumindest wennes> um C/C++ geht: Falls l_ovl volatile ist, darf es nur ausgewertet werden,> wenn l_cnt false ist.
Yep, wird hier aber höchstwahrscheinlich keine Rolle spielen, selbst
wenn die Vars volatile sind.