Использование виртуальных функций в C++ может привести к снижению производительности во время выполнения. habr.com
Некоторые причины влияния виртуальных функций на производительность:
- Косвенные вызовы функций. popov.dev Вызовы виртуальных функций предполагают дополнительный уровень косвенности через vtable, что может привести к небольшим накладным расходам по сравнению с прямыми вызовами функций. popov.dev Однако современные компиляторы оптимизируют этот процесс, чтобы минимизировать влияние. popov.dev
- Затраты памяти. popov.dev Каждый объект класса с виртуальными функциями содержит vptr, а каждый класс с виртуальными функциями имеет vtable. popov.dev Это приводит к небольшому увеличению затрат памяти в программе. popov.dev
- Встроенные функции. popov.dev Компилятор не может встроить виртуальные функции, поскольку их фактическая реализация определяется во время выполнения. popov.dev Это может повлиять на производительность, если вызов функции выполняется в критически важной для производительности части кода. popov.dev
В приложениях, критически важных для производительности (например, в видеоиграх), вызов виртуальной функции может быть слишком медленным. stackoverflow.com
Чтобы эффективно использовать виртуальные функции в C++, рекомендуется объявлять их как виртуальные только тогда, когда требуется динамический полиморфизм, и избегать делать все функции виртуальными по умолчанию. popov.dev