Zunächst einmal ist der ganzzahlige Vergleich sehr billig. Es ist Verzweigung , die (wegen der Gefahr von Verzweigungsfehlvorhersagen) kann teuer werden.
Ich habe Ihre Funktion auf einer Sandy-Bridge-Box mit gcc 4.7.2, gebenchmarkt und es dauert etwa 1.2ns pro Anruf.
Das Folgende ist etwa 25% schneller, bei etwa 0,9ns pro Anruf:
%Vor%Der Maschinencode für das Obige ist vollständig zweiglos:
%Vor%Zwei Dinge sind erwähnenswert:
- Das Grundlevel der Leistung ist sehr hoch.
- Die Beseitigung von Verzweigungen verbessert hier die Leistung, aber nicht dramatisch.