Понял ли я это правильно, if
операторы больше зависят от предсказания ветвления, а поиск в v-таблице больше зависит от предсказания цели ветвления? Что касается v-таблиц, то здесь нет «предсказания ветвления», только целевое предсказание?
Попытка понять, как v-таблица обрабатывается процессором.
Предсказание ветвления предсказывает, будет ли ветвь взятый. Предсказание целевой ветви — это предсказание где ветка собирается. Эти две вещи независимы и могут встречаться во всех комбинациях.
Примеры этого могут быть:
goto
заявлениеbreak
или же continue
заявлениеif/else
заявление (прыгать мимо else
оговорка)switch
оператор (если скомпилирован в таблицу переходов)if
заявлениеswitch
заявление (если составлено в серию if/else
заявления)&&
а также ||
операторы?:
операторif (condition) { obj->VirtualFunctionCall(); }
в условный косвенный скачок, как jne *%eax
если он появляется в конце функции из-за оптимизации хвостового вызова.Других решений пока нет …