Блеск и нищета ООП - страница 4

 
Integer:

... подразумевается, что это дело должно работать очень быстро, так как нет никаких вызовов if или switch для изменения работы программы, только один раз при инициализации выбрали нужный класс - потомок, дальше все работает прямо и просто. 

...

MetaDriver:

...

В зыках с "настоящими" указателями такого эффекта не будет, там switch будет проигрывать - тем больше, чем больше список выборов.

...

Ребята, курите документацию по switch. Хороший switch - это коммутируемый переход, чья производительность не зависит от количества вариантов выбора. 1 вариант, 100 или 1000 - скорость его перехода будет постоянной.
Как работает оператор switch в Си/Си++ - CyberForum.ru - форум программистов и сисадминов
  • Evg
  • www.cyberforum.ru
ВНИМАНИЕ! Вопросы по существу обсуждаемого вопроса просьба задавать здесь или создать тему на форуме и кинуть на неё ссылку в блог или мне в личку. Причин для этого несколько. Я, как и любой другой автор, всегда могу упустить интересный момент обсуждаемой темы (что подтвердилось на практике). А потому задаваемый вопрос может закрывать...
 
Integer:
Зачем мне понимать механизмы компиляции? Только для того, чтобы уверовать, что плохой резлультат лучше хорошего?  Имеет значение результат. 

Странное утверждение. Вы пытаетесь решить оптимизационные задачи уровня компилятора и при этом не знаете как он устроен.

 
C-4:
Ребята, курите документацию по switch. Хороший switch - это коммутируемый переход, чья производительность не зависит от количества вариантов выбора. 1 вариант, 100 или 1000 - скорость его перехода будет постоянной.
Да, у нас switch с прямым прыжком по таблице, если есть достаточное количество элементов, как в примерах.
 

я в программировании близок к нулю и знаю что ООП больше сделан для удобства нежели для скорости. И правда - ООП удобная штука, если уметь ею пользоваться. 

Метаквотсам же лучше уделить время некорректному спреду в тестере. Толку писать на нем экспертов если протестить адекватно  их нельзя. Большей частью это относится к торговле на FORTS. 

 
dimeon:

я в программировании близок к нулю и знаю что ООП больше сделан для удобства нежели для скорости. И правда - ООП удобная штука, если уметь ею пользоваться. 

Метаквотсам же лучше уделить время некорректному спреду в тестере. Толку писать на нем экспертов если протестить адекватно  их нельзя. Большей частью это относится к торговле на FORTS. 

Более подробное объяснение (доказательства) уже приводили где-то ?

Здесь принято доказательством свои заявления подкреплять, иначе даже смотреть на станут. ;) 

 

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

 

Данная картинка нам намекает, что не тем товарищи заняты и ищут черную кошку в темной комнате.

 
Renat:

...

А вот виртуальный метод вырезать нельзя - он вызывается всегда. В результате в одном случае просто крутится цикл, а в другом в цикле вызов.

...

Кстати пустые циклы можно тоже удалять. Код:

void OnStart(){
   for(int i = 0; i < 1000000; i++)
      foo();
}

void foo(void){}

 Можно свести к простому: 

void OnStart(){
   ;
}
 
Vinin:

Доказательства будут с другой стороны. Или опять только слова. 

По большому счету интересует только факты.

Хотя я и так знаю что ООП работает медленнее, но предоставляет вполне конкретные удобства

В понедельник на примере профилирования реального ООП-проекта покажу что его производительность в пределе стремится к производительности вызовов системных функций.
 
C-4:

Странное утверждение. Вы пытаетесь решить оптимизационные задачи уровня компилятора и при этом не знаете как он устроен.

Извините, вы что-то перепутали, компилятор я не пытался оптимизировать. Если вам непонятно, что я делал, попытайтесь перечитать эту тему с самого начала еще, но более внимательно, и еще, постарайтесь не умничать не в тему.
 
Renat:
Да, у нас switch с прямым прыжком по таблице, если есть достаточное количество элементов, как в примерах.

Только там в примерах взят простейший вариант, когда значения ключей идут с единичным шагом, поэтому просто вычисляется смещение.  Но если допустим имеем такой вариант:

case 10: ...

case 100: ... case 1000: ... case 1000000: ...

Тут, как я понимаю, индекс определяется через бинарный поиск.  У вас заложено оба этих способа?

Причина обращения: