La manière canonique pour ne statique de la direction de la prévision est qu' if
est prévu non ramifié (c'est à dire chaque if
clause est exécuté, pas else
), des boucles et des arrière-goto
s sont prises. Donc, ne mettez pas le cas courant en else
si vous vous attendez statique de prédiction pour être significatif. Les déplacements untaken boucle n'est pas aussi facile; je n'ai jamais essayé, mais je suppose que mettre un else
clause devrait fonctionner assez de façon portable.
De nombreux compilateurs soutien d'une certaine forme de #pragma unroll
, mais il sera toujours nécessaire à la garde avec une sorte d' #if
afin de protéger d'autres compilateurs.
Direction de la prévision conseils peuvent théoriquement exprimer une description complète de la façon de transformer un programme de contrôle de flux graphique et d'organiser les blocs de base dans la mémoire exécutable... alors il existe une variété de choses à exprimer, et la plupart ne seront pas très portable.
Comme GNU recommande dans la documentation pour l' __builtin_expect
, le profil de l'optimisation orientée est supérieure aux indices, et avec moins d'effort.