Есть ли какой-нибудь портативный способ делать подсказки предсказания ветвления? Рассмотрим следующий пример:
if (unlikely_condition) {
/* ..A.. */
} else {
/* ..B.. */
}
Отличается ли это от выполнения:
if (!unlikely_condition) {
/* ..B.. */
} else {
/* ..A.. */
}
Или это единственный способ использовать конкретные подсказки компилятора? (например, __builtin_expect в GCC)
Будут ли компиляторы обрабатывать условия if
по-разному в зависимости от порядка условий?
if
? Как 2_? В настоящее время синтаксис не позволяет этого. Однако он разрешаетif([[unlikely]] bool b = ...) { }
. Может быть, этим можно злоупотреблять :) - person Johannes Schaub - litb   schedule 13.09.2010if(likely(...))
мусора в коде, совершенно не критичном для производительности, и, по моему мнению, это действительно плохо. Во-первых, это неестественно читается по-английски — это звучит так, будто это условие может быть истинным, а не если это условие истинно, что, скорее всего, так и есть. А для другого это просто беспорядок. Если у вас нет большого количества критичных к производительности условных выражений, которые уже не будут компилироваться вcmov
или подобное, просто игнорируйте подсказки предсказания ветвления. - person R.. GitHub STOP HELPING ICE   schedule 13.09.2010if(unlikely(...))
. Они предпочитают ранние выходы, которые упрощают отслеживание потока кода. Если бы они этого не сделали, то предсказание статического перехода всегда терпело бы неудачу. - person Oskar N.   schedule 14.09.2010