X ist fast 99,9% der Zeit wahr, aber ich muss auch mit Y und Z umgehen. Obwohl der Rumpf der X-Bedingung leer ist, denke ich, dass er schneller sein sollte als potentiell 2 andere Bedingungen Y und Z zu prüfen, wenn die X-Bedingung weggelassen wird. Was denkst du?
%Vor%Wie üblich, wenn im Zweifel Profil; Wie auch immer, wenn ich diesen Code lesen würde, würde ich viel klarer etwas finden wie:
%Vor%Wenn ein Compiler annehmen soll, würde dies im Allgemeinen die erste Bedingung true begünstigen.
Sie können etwas wie __builtin_expect
verwenden, um dies zu kontrollieren (wie Ugo detailliert).
Wenn es in einer Schleife ist, sollten Sie messen, weil auch Hardware eine Rolle spielt - es ist nicht nur die Quelle und der Compiler. Wie ist Ihr Cache und wie funktioniert die Verzweigungsvorhersage für Sie? Profil. Ändern. Profil. Vergleichen Sie.
Brauchst du wirklich das Unwahrscheinliche auf y und z? Es klingt von deiner Frage aus wie wenn x nicht wahr ist, dann müssen y oder z wahr sein, in diesem Fall sind diese unwahrscheinlichen Werte falsch und ich würde damit gehen:
%Vor%(Hätte dies zu einem Kommentar zu Ugos Antwort gemacht, aber ich habe nicht genug Ansehen, um Kommentare zu hinterlassen.)
Tags und Links c c++ gcc if-statement branch-prediction