2012-04-19 2 views
0

Можно создать дубликат:
Virtual functions and performance - C++Что делает виртуальные функции такими медленными? C++

Я пытаюсь реорганизовать свой код, и везде люди говорят, что использование виртуальных функций является huuuuge производительность мудрым Ноно, почему? и существует ли другой способ, чтобы я мог наследовать класс и переопределять функции, определенные в базовом классе?

+0

Кто вам сказал? –

+0

У вас действительно проблема с производительностью? –

ответ

1

Виртуальные функции вызываются через vtable, который представляет собой в основном массив указателей функций. Таким образом, каждый раз, когда он вызывается, есть дополнительный массив поиска. Я не уверен, буду ли я называть это huuuuge ноно, хотя, в общем, они должны быть довольно быстрыми.

От Википедии:

Виртуальный вызов требует, по меньшей мере, дополнительное индексированного разыменования и иногда «FixUp» Кроме того, по сравнению с не-виртуальным вызовом, который просто прыжок скомпилированный указатель. Поэтому вызов виртуальных функций по своей сути медленнее, чем вызов не виртуальных функций. Эксперимент , сделанный в 1996 году, показывает, что примерно 6-13% от времени выполнения расходуется просто на правильную функцию , хотя накладные расходы могут достигать 50%. [4] Стоимость виртуальных функций может быть не столь высокой на современных архитектурах процессора из-за большого количества кэшей и лучшего прогноза ветвления.

+0

Реализация определена, но большинство реализаций делают это именно так. –

+0

Я бы также предположил, что компиляторы прошли долгий путь с 1996 года :) –

Смежные вопросы