Часто відомі як макроси likely
і unlikely
макроси допомагають компілятору дізнатися, чи if
буде звичайно вводитись або пропускати. Використання його призводить до деяких (досить незначних) поліпшень продуктивності.
Я почав їх використовувати нещодавно, і не знаю, як часто такі підказки слід використовувати. Зараз я використовую його для перевірки помилок if
, які зазвичай позначаються як unlikely
. Наприклад:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
Це здається нормальним, але перевірка помилок if
трапляється досить часто і, отже, використання вказаних макросів.
Моє запитання: чи занадто багато макросів likely
і unlikely
макросів для кожної перевірки помилок if
?
Хоча ми ще в цьому, які інші місця вони часто використовують?
У моєму теперішньому використанні це бібліотека, яка робить абстракцію від підсистеми в режимі реального часу, тому програми стануть переносними між RTAI, QNX та іншими. Однак, більшість функцій є досить маленькими і безпосередньо викликають одну-дві інші функції. Багато навіть static inline
функцій.
Отже, по-перше, це не програма, яку я міг би профілювати. Немає сенсу "визначати шийки", оскільки це бібліотека, а не окрема програма.
По-друге, це на кшталт "я знаю, що це малоймовірно, я б також міг сказати це компілятору". Я активно не намагаюся оптимізувати це if
.
likely
і unlikely
існує, і що вони роблять. Я не знайшов нічого, що б насправді підказувало, коли і де найкраще їх використовувати.