Оглавление
Таблица виртуальных методов
-
Основы виртуальных функций
- Виртуальные функции позволяют переопределять поведение методов в производных классах.
- Виртуальные функции используются для полиморфизма и динамической диспетчеризации.
- Виртуальные функции могут быть реализованы с помощью таблиц виртуальных методов или виртуальных таблиц.
-
Реализация виртуальных функций
- В C++ виртуальные функции реализуются с помощью виртуальных таблиц, которые содержат указатели на функции.
- Виртуальные таблицы содержат указатели на функции, которые могут быть переопределены в производных классах.
- Указатели на функции в виртуальных таблицах могут быть исправлены для получения правильного адреса функции.
-
Эффективность виртуальных функций
- Виртуальные вызовы медленнее невиртуальных вызовов из-за дополнительных операций.
- Эксперименты показали, что виртуальные функции могут занимать до 50% времени выполнения.
- Современные процессоры могут улучшить производительность виртуальных функций благодаря большему кэшу и лучшему предсказанию ветвлений.
-
Альтернативы виртуальным функциям
- Существуют альтернативы, такие как бинарная отправка, которые могут быть более эффективными в некоторых случаях.
- Таблицы виртуальных методов ограничены известным набором методов и могут быть оптимизированы для размещения в массиве.
-
Инструменты для анализа виртуальных функций
- Существуют инструменты, такие как -fdump-class-hierarchy, для вывода таблиц виртуальных методов.
-
Рекомендации
- Эллис и Страуструп рекомендуют использовать виртуальные функции для полиморфизма и динамической диспетчеризации.