Con frecuencia, las macros conocidas como likelyy unlikelyayudan al compilador a saber si ifgeneralmente se va a ingresar o omitir un Usarlo da como resultado algunas mejoras de rendimiento (más bien menores).
Empecé a usarlos recientemente, y no estoy seguro de con qué frecuencia se deben usar esas sugerencias. Actualmente lo uso con comprobación de errores ifs, que generalmente están marcados como unlikely. Por ejemplo:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
Parece correcto, pero la comprobación de errores ifocurre con bastante frecuencia y, en consecuencia, el uso de dichas macros.
Mi pregunta es, ¿es demasiado tener likelyy unlikelymacros en cada comprobación de errores if?
Mientras estamos en eso, ¿qué otros lugares se usan a menudo?
En mi uso actual, está en una biblioteca que hace una abstracción del subsistema en tiempo real, por lo que los programas serían portátiles entre RTAI, QNX y otros. Dicho esto, la mayoría de las funciones son bastante pequeñas y llaman directamente a una o dos funciones más. Muchos son incluso static inlinefunciones.
Entonces, antes que nada, no es una aplicación que pueda perfilar. No tiene sentido "identificar cuellos de botella" ya que es una biblioteca, no una aplicación independiente.
En segundo lugar, es algo así como "Sé que esto es poco probable, también podría decírselo al compilador". No trato activamente de optimizar el if.
likelyy unlikelyexiste y lo que hacen. No encontré nada que sugiriera cuándo y dónde es mejor usarlos.