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