Вопросы к Поиску с Алисой
Виртуальные функции требуют больше памяти и времени выполнения, потому что для их работы необходима таблица виртуальных функций (vtable). natalia.appmat.ru metanit.com
В этой таблице хранятся адреса виртуальных функций, определённых для того класса, к которому реально принадлежит объект. natalia.appmat.ru При создании объекта его тип известен, поэтому компилятор может определить адреса виртуальных функций этого класса и записать их в vtable. natalia.appmat.ru
При вызове виртуальной функции её адрес определяется не на этапе компиляции, а во время выполнения программы. natalia.appmat.ru Из vtable берётся элемент с определённым номером и вызывается функция, находящаяся по этому адресу. natalia.appmat.ru
Процесс поиска конкретной функции по указателю на объект называется поздним связыванием и выполняется во время работы программы. habr.com Позднее связывание увеличивает накладные расходы на вызов и препятствует оптимизации кода компилятором. habr.com
Таким образом, для реализации механизма виртуальности требуется количество памяти, равное размеру указателя, на каждую виртуальную функцию и одна операция выбора значения из памяти на каждый вызов виртуальной функции. natalia.appmat.ru