Estaba cotilleando las novedades de GCC, y me he encontrado con lo que llaman __builtin_expect. Esta macro, permite indicar al compilador la probabilidad de una condición, de manera que el predictor de saltos sea capaz de generar un código más eficiente. Lo habitual es que se usen con una macro más legible llamada likely / unlikely, y que indica una probabilidad alta, y una baja respectivamente. Imaginemos un fragmento de código que lee un pixel, y en el caso de ser de color negro, retorna cierto, y falso en caso contrario: if (GetPixel() == BLACK) { return(true); } else { return(false); } Digamos que el compilador podría traducir este código a x86 de una forma parecida a esta: call GetPixel cmp eax, BLACK je true false: xor eax, eax ret true: mov eax, 1 ret De este modo nos encontramos que a nivel de lenguaje máquina, cuando el píxel sea [...]
↧