виртуальная функция
От: RI Украина  
Дата: 07.10.04 10:19
Оценка:
Есть класс в нем виртуальная функция.
Я вызываю ее как обычную, ну короче просто типа TClass.MyFunc()
Вопрос : на сколько это дольше чем если она обычная?
Причем оценить нужно аналитически с расчетом на процессор 166.
заранее благодарен за советы.
Re: виртуальная функция
От: Курилка Россия http://kirya.narod.ru/
Дата: 07.10.04 10:56
Оценка:
Здравствуйте, RI, Вы писали:


RI>Есть класс в нем виртуальная функция.

RI>Я вызываю ее как обычную, ну короче просто типа TClass.MyFunc()
RI>Вопрос : на сколько это дольше чем если она обычная?
RI>Причем оценить нужно аналитически с расчетом на процессор 166.
А почему бы не оценить практически?
Коли проц указан (правда где сейчас такой найти не знаю )
Берёшь делаешь тест и — вуаля.
Т.е. получаешь 2 циферки (или 2 столбика циферок для разных выборок) и сравниваешь — что трудного-то?
Re: виртуальная функция
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.10.04 14:11
Оценка: 5 (1)
Здравствуйте, RI, Вы писали:

RI>Есть класс в нем виртуальная функция.

RI>Я вызываю ее как обычную, ну короче просто типа TClass.MyFunc()
RI>Вопрос : на сколько это дольше чем если она обычная?
Нинасколько. Если компилятор знает фактический тип, то производится раннее связывание. Только в том случае, если фактический тип неизвестен, будет происходить виртуальный вызов.
RI>Причем оценить нужно аналитически с расчетом на процессор 166.
Накладные расходы на виртуальность вызова настолько смешны, что играют роль только при очень-очень коротких телах методов. А для таких случаев имеет смысл вообще избавиться от вызова и выполнить инлайнинг.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: виртуальная функция
От: Nick_ Россия  
Дата: 07.10.04 14:20
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Накладные расходы на виртуальность вызова настолько смешны, что играют роль только при очень-очень коротких телах методов. А для таких случаев имеет смысл вообще избавиться от вызова и выполнить инлайнинг.

Да, но когда фактический тип не известен, то инлайнинг не сделаешь.
А при правильном ООП подходе, методы обычно получаются короткими...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.