Я не знаком ни с одним из профилировщиков, которые будут показывать эффективность филиалов.Программа Linux time
должна работать достаточно хорошо, чтобы помочь вам в тестировании.
На всех современных процессорах x86 инструкции JMPcc выполняются быстрее, если они не разветвляются, а вместо этого просто переходят к следующей инструкции.
Функция GCC __builtin_expect
предоставляет подсказку компилятору - она сообщает, какая сторона if () должна быть транзитной, а какая - ветвью.Вы должны использовать эту функцию, только если вы на 100% уверены в этом.Не существует эквивалентной функции для VC ++.Я не уверен насчет ICC.
Лучший способ сделать это - избежать этих нестандартных функций и использовать Profile Guided Optimization (PGO), при котором вы запускаете программу и записывает все эти ветви ввыяснить, где вещи идут.