C / C ++ am effizientesten bei der Auswertung von Anweisungen

8

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%     
chriskirk 19.01.2012, 21:45
quelle

4 Antworten

11

Vielleicht möchten Sie wissen, was genau passiert, wenn Sie wahrscheinlich oder unwahrscheinlich verwenden:
Ссылка

Ich würde persönlich

schreiben %Vor%

Was bedeutet, wenn x , setze die Ausführung fort, sonst springe zu if body.

    
log0 19.01.2012, 22:03
quelle
8

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%     
Matteo Italia 19.01.2012 21:49
quelle
1

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.

    
justin 19.01.2012 22:09
quelle
0

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.)

    
MikeFHay 10.08.2012 10:34
quelle