¿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.
Eche un vistazo a Lo que todo programador debe saber sobre la memoria en "6.2.2 Optimizar el acceso al caché de la instrucción de nivel 1" - hay una sección sobre esto exactamente.
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.