Вероятные/маловероятные макросы могут использоваться в коде пространства пользователя?

Я думаю, это потому, что вы не ожидаете разрешения асинхронного запроса.

25
задан jww 28 September 2016 в 02:38
поделиться

3 ответа

Да, они могут. В ядре Linux они определены как

#define likely(x)       __builtin_expect(!!(x), 1)
#define unlikely(x)     __builtin_expect(!!(x), 0)

Макросы __builtin_expect являются специфическими макросами GCC, которые используют предсказание ветвления; они сообщают процессору, может ли условие быть истинным, чтобы процессор мог предварительно выбирать инструкции на правильной «стороне» ветви.

Вы должны заключить определения в ifdef, чтобы обеспечить компиляцию на других компиляторах:

#ifdef __GNUC__
#define likely(x)       __builtin_expect(!!(x), 1)
#define unlikely(x)     __builtin_expect(!!(x), 0)
#else
#define likely(x)       (x)
#define unlikely(x)     (x)
#endif

Это определенно даст вам оптимизацию, если вы будете использовать его для правильных предсказаний ветвления.

41
ответ дан SamB 28 November 2019 в 20:38
поделиться

Посмотрите Что каждый программист должен знать о памяти в разделе «6.2.2 Оптимизация доступа к кэшу инструкций уровня 1» - здесь есть раздел именно об этом.

10
ответ дан Nikolai Fetissov 28 November 2019 в 20:38
поделиться

Макросы вероятных () и маловероятных () - это красивые названия, определенные в заголовках ядра для чего-то, что является реальной функцией gcc

4
ответ дан 28 November 2019 в 20:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: