Les macros souvent connues sous le nom de likely
et unlikely
aident le compilateur à savoir si un if
fichier va généralement être entré ou ignoré. Son utilisation entraîne des améliorations de performances (plutôt mineures).
J'ai commencé à les utiliser récemment et je ne sais pas à quelle fréquence ces conseils devraient être utilisés. Je l'utilise actuellement avec des vérifications d'erreurs if
, qui sont généralement marquées comme unlikely
. Par exemple:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
Cela semble correct, mais la vérification des erreurs if
se produit assez souvent et, par conséquent, l'utilisation desdites macros.
Ma question est, est - il trop d'avoir likely
et unlikely
macros sur chaque vérification des erreurs if
?
Pendant que nous y sommes, quels autres endroits sont-ils souvent utilisés?
Dans mon utilisation actuelle, c'est dans une bibliothèque qui fait une abstraction du sous-système en temps réel, donc les programmes deviendraient portables entre RTAI, QNX et d'autres. Cela dit, la plupart des fonctions sont plutôt petites et appellent directement une ou deux autres fonctions. Beaucoup sont même des static inline
fonctions.
Donc, tout d'abord, ce n'est pas une application que je pourrais profiler. Il n'est pas logique d '«identifier les goulots d'étranglement» car c'est une bibliothèque, pas une application autonome.
Deuxièmement, c'est un peu comme "Je sais que c'est peu probable, autant le dire au compilateur". Je n'essaie pas activement d'optimiser le if
.
likely
et unlikely
existe et ce qu'ils font. Je n'ai rien trouvé qui suggérerait réellement quand et où il est préférable de les utiliser.