Часто известные как likely
и unlikely
макросы помогают компилятору узнать, будет ли if
он вводиться или пропускается. Его использование приводит к некоторым (довольно незначительным) улучшениям производительности.
Я начал использовать их недавно, и я не уверен, как часто следует использовать такие подсказки. В настоящее время я использую его с проверкой ошибок if
s, которые обычно помечаются как unlikely
. Например:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
Вроде бы все нормально, но проверка ошибок if
происходит довольно часто и, следовательно, использование упомянутых макросов.
У меня вопрос, слишком ли много likely
и unlikely
макросов при каждой проверке ошибок if
?
В то время как мы в этом, какие другие места они часто используют?
В моем текущем использовании это библиотека, которая абстрагируется от подсистемы реального времени, поэтому программы становятся переносимыми между RTAI, QNX и другими. Тем не менее, большинство функций довольно маленькие и напрямую вызывают одну или две другие функции. Многие даже static inline
функции.
Итак, во-первых, это не приложение, которое я мог бы профилировать. Не имеет смысла «определять узкие места», поскольку это библиотека, а не отдельное приложение.
Во-вторых, это что-то вроде: «Я знаю, что это маловероятно, я мог бы также рассказать об этом компилятору». Я не пытаюсь активно оптимизировать if
.
likely
и unlikely
существует и что они делают. Я не нашел ничего, что могло бы предложить, когда и где лучше всего их использовать.