Часто відомі як макроси 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існує, і що вони роблять. Я не знайшов нічого, що б насправді підказувало, коли і де найкраще їх використовувати.