Ce sont des macros qui donnent des conseils pour le compilateur sur une branche peut aller. Les macros étendre à GCC d'extensions spécifiques, si elles sont disponibles.
GCC utilise pour optimiser pour la direction de la prévision. Par exemple, si vous avez quelque chose comme ce qui suit
if (unlikely(x)) {
dosomething();
}
return x;
Ensuite, il peut restructurer ce code à quelque chose de plus comme:
if (!x) {
return x;
}
dosomething();
return x;
L'avantage de ceci est que lorsque le processeur prend une branche la première fois, il y a une surcharge importante, car elle peut avoir été éventuellement le chargement et l'exécution de code à l'avant. Lorsqu'il détermine qu'il va prendre la direction, puis il a à invalider, et de commencer à la direction de la cible.
La plupart des processeurs modernes ont maintenant une sorte de direction de la prévision, mais que seulement aide lorsque vous avez été par le biais de la branche, et la branche est toujours dans la direction de la prévision du cache.
Il y a un certain nombre d'autres stratégies que le compilateur et le processeur peut utiliser dans ces scénarios. Vous pouvez trouver plus de détails sur la façon de la branche prédicteurs à Wikipedia: http://en.wikipedia.org/wiki/Branch_predictor