Ich habe mich durch einige Teile des Linux-Kernels gewühlt und dabei Aufrufe wie diesen gefunden:
if (unlikely(fd < 0))
{
/* Do something */
}
o
if (likely(!err))
{
/* Do something */
}
Ich habe die Definition von ihnen gefunden:
#define likely(x) __builtin_expect((x),1)
#define unlikely(x) __builtin_expect((x),0)
Ich weiß, dass sie der Optimierung dienen, aber wie funktionieren sie? Und wie viel Leistungs-/Größenverlust kann man von ihrer Verwendung erwarten? Und ist es die Mühe wert (und verlieren die Portabilität wahrscheinlich) zumindest in Engpass-Code (in Userspace, natürlich).