Есть ли выигрыш в производительности с несколькими вызовами функций, а не с одним большим? - PullRequest
5 голосов
/ 07 декабря 2011

Я сейчас создаю игру для iPad и iPhone, используя cocos2d, Box2D и Objective-C.

Многое происходит с каждым обновлением, и многое нужно решить.

Недавно я реорганизовал большую часть своего кода в несколько небольших методов вместо сотен строк кода внутри одного метода.

Есть ли потеря производительности при этом? Будет ли меньше вызовов методов увеличивать производительность?

Ответы [ 4 ]

9 голосов
/ 07 декабря 2011

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

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

Вы также можете проверить этот ответ: https://stackoverflow.com/a/4816703/252687 Встроенные функции могут немного уменьшить вышеупомянутые издержки без ущерба длямодульность.

3 голосов
/ 07 декабря 2011

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

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

3 голосов
/ 07 декабря 2011

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

Лично я иду за самый чистый и понятный код, пусть компилятор оптимизирует и в конечном профиле для реальных узких мест.


Когда-то меня наняли на основе ответа на один вопрос, который я хотел бы описать до оптимизации. : -)

2 голосов
/ 07 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...