2014-12-03 2 views
-1

Я разработчик игры, поэтому производительность для меня очень важна. Мой простой вопрос:Функциональные вызовы функций за кадр

У меня есть много проверок (щелчков кнопок, коллизий и т. Д.), Выполняемых за кадр, но я не хочу ставить все в одну функцию, поэтому я бы разделил их на другие функции и просто называть их:

void Tick() 
{ 
//Check 1 ..... lots of code 
//Check 2 ...... lots of code 
//Check 3 ..... lots of code 
} 

в

void Tick() 
{ 
funcCheck1(); 
funcCheck2(); 
funcCheck3(); 
} 

void funcCheck1() 
{ 
//check1 lots of code 
} 
void funcCheck2() 
{ 
//check2 lots of code 
} 
void funcCheck3() 
{ 
//check3 lots of code 
} 

ли вызов функции для каждого кадра имеет какое-либо влияние на производительность (не встраиваемой) Очевидно, что второй вариант гораздо более удобным для чтения?.

+5

Почему бы вам не рассказать об этом и узнать? – user657267

+2

Накладные расходы на вызов функции над работой в функции могут быть существенными, если функция ДЕЙСТВИТЕЛЬНО тривиальна, но в большинстве случаев это не так. Единственный способ ДЕЙСТВИТЕЛЬНО выяснить, однако, - измерить разницу. Я всегда начинаю с предположения, что вызовы функций являются «бесплатными», и если профилирование позже говорит мне, что это проблема, убедитесь, что они так или иначе связаны. –

+3

Если вы хотите цифры, измерьте. –

ответ

0

Если вы не передаете какие-либо сложные объекты по значению, накладные расходы на вызов нескольких функций вместо того, чтобы поместить весь код в одну функцию, должны быть незначительными (например, поместить параметры функции поверх стека, добавить место для возврата type, перейти к началу кода вызываемой функции)

0

Вы не можете сказать точно, в частности, что компилятор может автоматически выполнять небольшую функцию. Единственный способ убедиться в использовании профилировщика и сравнить два сценария.

+0

, даже если функция пуста, она имеет небольшие накладные расходы xx в оптимизации выпуска – jeromintus

+0

Да, но это вопрос компромисса. как правило, производительность хорошего объектно-ориентированного проектирования приложений плоха. Для оптимизации вам нужно сломать хорошие правила дизайна (хороший пример - назойливая библиотека boost). Так стоит ли нарушать хорошие правила проектирования, чтобы получить несколько миллисекунд за функцию, которая уже выполняет сотни миллисекунд? Более подробную информацию о теме ловушки объектно-ориентированного проектирования увидеть эту презентацию: http://research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf –

+0

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

Смежные вопросы