Здравствуйте, Denis Ivlev, Вы писали:
DI>>>Неудачное стечение обстоятельств и вызов ВФ оказывается медленней в сотни раз. При этом в С виртуальные функции при необходимости делаются легко.
Pzz>>Откуда там в сотни раз?
DI>Из архитектуры компьютера:
Это может вообще любого компьютерного телодвижения коснуться, и не специфично для виртуальных методов. Но вообще, в C++, в котором таблица виртуальных методов общая для всех экземпляров класса, у нее больше шансов оказаться в кэше, чем у указателей, размазанных по миллиону структур.
DI>Заинлайненая функция будет запрефетчена в кеш инструкций, поход только в таблицу виртуальных функций, если она не оказалась в кеше может стоить в 200 раз больше, а еще и саму функцию затем надо вызвать, а это еще один поход в память. Но даже если она и не будет заинлайнена, то это все равно сильно дешевле.
Заинланйенная фукция может запросто отжать из кэша инструкций что-нибудь другое, не менее полезное. Я к тому, что инлайн может и ускорять программу, а может наоборот.