Con frecuencia, las macros conocidas como likely
y unlikely
ayudan al compilador a saber si if
generalmente 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 if
s, 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 if
ocurre con bastante frecuencia y, en consecuencia, el uso de dichas macros.
Mi pregunta es, ¿es demasiado tener likely
y unlikely
macros 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 inline
funciones.
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
.
likely
y unlikely
existe y lo que hacen. No encontré nada que sugiriera cuándo y dónde es mejor usarlos.