Как описано в Виртуальные функции и производительность - C ++ виртуальные методы могут влиять на производительность (дополнительный поиск в vtable, без вставки, ...).
Но мне было интересно, может ли использование виртуальных функций ускорить процесс связывания?
Предположим, у меня есть класс X, вызывающий метод класса Y.
- Если метод не виртуальный, то
- компилятор должен найти метод в классе Y, чтобы определить, является ли он допустимым и как переводить вызов в сборку
- компоновщик должен найти метод в классе Y и заменить адрес вызова в сгенерированной компилятором сборке адресом вызываемого метода.
- Если метод является виртуальным, то
- компилятору также придется искать метод в классе Y и искать виртуальную таблицу класса Y для построения вызова (используя смещение в виртуальной таблице)
- компоновщик больше ничего не должен делать
Мне кажется, что при использовании виртуальных методов компоновщик больше не должен делать много, и поэтому он будет быстрее (хотя я думаю, что разница будет небольшой).
Это правда? У кого-нибудь есть опыт с этим? Было ли это когда-либо проверено?