Об эффективности виртуальных функций
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 04.08.24 20:19
Оценка:
Всю жизнь был уверен, что оценки вроде "виртуальные функции сильно снижают быстродействие" идут от неграмотных гуманитариев, которые где-то слышали звон, а потом рожают на его основе заумные тексты, которые потом цитируют технари, совершенно незнакомые с языком. Но почитал описании истории языка от Страуструпа (я читал несколько его книг, но истории раньше почему-то не попадалось), где он пишет, что многим программистам, в том числе системным, "было трудно поверить в то, что виртуальные функции могут быть достаточно быстрыми".

Откуда вообще могло взяться такое опасение в профессиональной-то среде? Ведь каждый системщик должен знать, что в любой ОС тьма косвенных вызовов, начиная от обработчиков прерываний, точек входа в драйверы ядра, внутренних служб ядра, и заканчивая всякими обработчиками событий и системными услугами "высокого уровня". Все это вызывается до тысяч раз в секунду, и я не помню, чтоб кто-то переживал по поводу самого факта косвенности вызова, ибо затраты на него ничтожны на фоне полезной работы любого кода.

Что эти люди, которые переживали (а некоторые и сейчас переживают, судя по дискуссиям) о "стоимости вызова", собирались делать с помощью виртуальных функций? Если вызывать их сотни тысяч раз в секунду и чаще, то и при обычном прямом вызове такие функции будут сильно тормозить. А если вызывать с разумной частотой, то лишь в очень редких случаях можно обнаружить заметную разницу.

Все эти люди старательно избегали любой косвенности, указатели/ссылки использовали лишь в самых крайних случаях?

Кому-нибудь удавалось заметно снизить быстродействие заменой обычных функций на виртуальные? Ну, кроме случаев совсем уж плохого проектирования.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.