Re[3]: v-table vs if call
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.12.22 05:27
Оценка: +1
Здравствуйте, maks1180, Вы писали:


M>>Ну, вообще-то нормальный компилятор может понять, когда можно напрямую вызвать. Если напрямую вызвать нельзя, то не пойму, как тебе if else поможет


M>Т.е. он может вызов виртуальной функции ClientCommon::OnRecv, превратить в что-то типа:

M>if (v-table==Client1) call Client1::OnRecv
M>else
M>if (v-table==Client2) call Client2::OnRecv
M>else
M>call ClientCommon::OnRecv

M>У него же нет гарантий, что у меня не появиться Client3 ?


Нет конечно. В твоем случае если реализаций немного и расширяться это дело не будет, то наверное быстрее будет свич работать. Надо смотреть что нагенерится, но в общем случае if else будут тормознее свича. vtbl — ну тут хз, оно может в кеше лежать и будет быстро. Ну и vtbl — это константная задержка вне зависимости от количества реализаций, if — если компилятор не додумается сделать табличку — будет совсем плохим, switch — говорят, что в этом случае компилятор генерит табличку и оно довольно эффективно, но по идее, тоже зависит от числа альтернатив

А вообще — я б просто бенчмарки бы писал и тестировал, что быстрее
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.