Я наткнулся на #define, в котором они используют __builtin_expect.
Документация гласит:
Встроенная функция:
long __builtin_expect (long exp, long c)Вы можете использовать
__builtin_expect, чтобы предоставить компилятору ветку прогнозная информация. В общем, вы должны предпочесть использовать актуальные профиль обратной связи для этого (-fprofile-arcs), так как программисты общеизвестно, что плохо предсказывают, как на самом деле работают их программы. Однако есть приложения, в которых эти данные сложно собрать.Возвращаемым значением является значение
exp, которое должно быть целым выражение. Семантика встроенного заключается в том, что ожидается, чтоexp == c. Например:if (__builtin_expect (x, 0)) foo ();означает, что мы не ожидаем вызова
foo, поскольку мы ожидаем, чтоxбудет нулевым.
Так почему бы не использовать напрямую:
if (x)
foo ();
вместо сложного синтаксиса с __builtin_expect?