Предсказание ветвлений и оптимизированный код

У меня есть следующий набор блоков кода, назначение обоих блоков одинаково. Мне пришлось реализовать 2-й блок, чтобы избежать обратной логики и повысить читабельность. Кстати, в производственном коде условие очень сложное.

Вопрос - я знаю, что ветвление - это плохо, сколько пенальти я должен заплатить. Так же, как дополнительная информация, также учтите, что вероятность появления ветки else очень высока.

X = Get_XValue()
if (X != 5)
{
    K = X+3;
    .
    .
}

X = Get_XValue()
if (X == 5)
{
    /*do nothing*/
}
else
{
    K = X+3;
    .
    .
}

1 ответ

Решение

Это все сводится к вашему компилятору. Хороший оптимизирующий компилятор обнаружит, что then-clause во втором примере пусто и обратный тест. Таким образом, он будет генерировать один и тот же код для обоих случаев, поэтому не должно быть никакого наказания.

В качестве дополнительного примечания могу добавить, что это относится ко всем трем компиляторам, которые я пробовал (clang, gcc и iccarm),

Другие вопросы по тегам