Использование виртуальных функций может незначительно снижать производительность программы. 1 Это связано с тем, что при их вызове происходит несколько дополнительных операций, которые могут приводить к промахам в кэше данных. 1 Например, сначала загружается указатель vtable из объекта, что может вызвать пропуск кэша данных, затем загружается указатель функции из vtable, что может привести к ещё одному пропуску кэша данных. 1
Однако в большинстве случаев два дополнительных промаха в кэше не являются проблемой, но в условиях жёсткого цикла работы с критически важным для производительности кодом это может значительно снизить производительность. 1
При этом удаление виртуальных функций обычно мало влияет на производительность кода: несмотря на уменьшение количества поисков по виртуальной таблице и исполнение меньшего количества инструкций, программа работает с той же скоростью. 2