As frequentemente conhecidas como likelye unlikelymacros ajudam o compilador a saber se uma entrada ifgeralmente será inserida ou ignorada. Usá-lo resulta em algumas melhorias (um pouco menores) no desempenho.
Comecei a usá-los recentemente e não sei com que frequência essas dicas devem ser usadas. Atualmente, eu o uso com a verificação de erros ifs, que geralmente são marcados como unlikely. Por exemplo:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
Parece bom, mas as checagens de erros ifocorrem com bastante frequência e, conseqüentemente, o uso das macros mencionadas.
Minha pergunta é: é demais ter likelye unlikelymacros em todas as verificações de erros if?
Enquanto estamos nisso, que outros lugares são usados com frequência?
No meu uso atual, está em uma biblioteca que faz uma abstração do subsistema em tempo real, para que os programas se tornem portáteis entre RTAI, QNX e outros. Dito isto, a maioria das funções é pequena e chama diretamente uma ou duas outras funções. Muitas são até static inlinefunções.
Portanto, antes de tudo, não é um aplicativo que eu possa criar um perfil. Não faz sentido "identificar gargalos", pois é uma biblioteca, não um aplicativo independente.
Segundo, é mais ou menos como "eu sei que isso é improvável, é melhor dizer ao compilador". Eu não tento ativamente otimizar o if.
likelye unlikelyexiste e o que eles fazem. Não encontrei nada que realmente sugerisse quando e onde é melhor usá-los.