Die häufig als likely
und bezeichneten unlikely
Makros helfen dem Compiler zu wissen, ob if
normalerweise ein eingegeben oder übersprungen wird. Die Verwendung führt zu einigen (eher geringfügigen) Leistungsverbesserungen.
Ich habe vor kurzem angefangen, sie zu verwenden, und ich bin mir nicht sicher, wie oft solche Hinweise verwendet werden sollten. Ich benutze es derzeit mit Fehlerprüfungen if
, die in der Regel als gekennzeichnet sind unlikely
. Beispielsweise:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
Es scheint in Ordnung zu sein, aber Fehlerprüfungen if
kommen ziemlich oft vor und folglich die Verwendung der genannten Makros.
Meine Frage ist, ist es zu viel zu haben likely
und unlikely
Makros auf jeder Fehlerprüfung if
?
Welche anderen Orte werden oft benutzt, wenn wir schon dabei sind?
In meiner jetzigen Verwendung befindet es sich in einer Bibliothek, die eine Abstraktion vom Echtzeit-Subsystem vornimmt, sodass Programme zwischen RTAI, QNX und anderen portierbar werden. Die meisten Funktionen sind jedoch eher klein und rufen direkt eine oder zwei andere Funktionen auf. Viele sind sogar static inline
Funktionen.
Zuallererst ist es also keine Anwendung, die ich profilieren könnte. Es ist nicht sinnvoll, Engpässe zu identifizieren, da es sich um eine Bibliothek und nicht um eine eigenständige Anwendung handelt.
Zweitens ist es wie "Ich weiß, dass dies unwahrscheinlich ist, ich könnte es auch dem Compiler sagen". Ich versuche nicht aktiv, das zu optimieren if
.
likely
und unlikely
existiert und was sie tun. Ich habe nichts gefunden, was darauf hindeuten würde, wann und wo es am besten ist, sie zu verwenden.