c linux gcc optimization likely-unlikely

¿Se pueden usar macros probables/improbables en el código de espacio de usuario?



linux gcc (3)

Encontré estas 2 macros en el código del kernel de Linux. Sé que son instrucciones para el compilador (gcc) para optimizaciones en caso de bifurcación. Mi pregunta es, ¿podemos usar estas macros en el código de espacio del usuario? ¿Dará alguna optimización? Cualquier ejemplo será de mucha ayuda.



Las posibles () y poco probables () macros son nombres bonitos definidos en los encabezados del núcleo para algo que es una característica real de gcc


Sí pueden. En el kernel de Linux , se definen como

#define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0)

Las macros __builtin_pect son macros específicas de GCC que usan la predicción de bifurcación; le dicen al procesador si es probable que una condición sea verdadera, de modo que el procesador pueda captar previamente las instrucciones en el "lado" correcto de la bifurcación.

Debería ajustar las definiciones en ifdef para garantizar la compilación en otros compiladores:

#ifdef __GNUC__ #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #else #define likely(x) (x) #define unlikely(x) (x) #endif

Definitivamente le dará optimizaciones si lo usa para las predicciones de bifurcación correctas.