Die häufig als likelyund bezeichneten unlikelyMakros helfen dem Compiler zu wissen, ob ifnormalerweise 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 ifkommen ziemlich oft vor und folglich die Verwendung der genannten Makros.
Meine Frage ist, ist es zu viel zu haben likelyund unlikelyMakros 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 inlineFunktionen.
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.
likelyund unlikelyexistiert und was sie tun. Ich habe nichts gefunden, was darauf hindeuten würde, wann und wo es am besten ist, sie zu verwenden.