Использование вероятного / маловероятного в качестве аргумента возврата в ядре Linux
Просто посмотрите на эту конструкцию в ядре Linux, и я не могу понять, что это значит.
110 return unlikely(sl->sequence != start);
я знаю это likely
/unlikely
сделаны с __builtin_expect
Функция описана здесь: http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
Вы можете использовать __builtin_expect, чтобы предоставить компилятору информацию о предсказании перехода.
Но какие подсказки предсказания ветвления возможны для безусловной ветки??
2 ответа
Просто угадайте здесь, но представьте, что функция встроена компилятором, и у вас есть это в вызывающем коде:
if (functionUsingUnlikelyForReturn()) {
// Do something
} else {
// Do something different
}
тогда предсказание ветвления вполне разумно принять к сведению.
"Скорее всего" не дает вероятности возврата из функции, а скорее ожидаемое значение для возвращаемого значения. Я предполагаю, что функция является встроенной, так что это подсказка для оптимизации вызывающей функции.