У меня два класса foo
а также bar
где один является суперклассом другого, и у них обоих есть метод hello_world
,
class foo {
virtual void hello_world();
};
class bar : public foo {
void hello_world();
};
У меня вопрос: есть ли разница в производительности, если я сделаю это виртуальным
за bar
«s hello_world
? Это станет этим:
class foo {
virtual void hello_world();
};
class bar : public foo {
virtual void hello_world();
};
Я буду в основном звонить hello_world
от bar
,
Я знаю, что виртуальная функция замедлит работу
потому что мы бегаем, ищем время. Но для этого случая есть ли разница?
Вызов виртуальной функции в контексте, где класс может действительно быть полиморфным, всегда оказывает некоторое влияние на производительность по сравнению с функцией с той же логикой, которая может быть встроенной. Основными причинами являются небольшие издержки на вызов функции, небольшие накладные расходы на поиск нужной функции и значительная потеря возможностей оптимизации. Последний пункт, как правило, самый дорогой.
Исходный пример не компилировался, то есть довольно ясно, что анализ производительности еще не проводился. Беспокоитесь о влиянии на производительность, когда вы измерили, что ваш код работает слишком медленно и что конкретный вызов действительно находится в той области, где возникает проблема производительности.
Других решений пока нет …