Я наткнулся на #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
?