Боюсь, что дни, когда вы могли определить стоимость вызова функции в тактовых циклах, давно прошли (для большинства платформ).
Возможно, это возможно для некоторых простых микроконтроллеров, но настольные процессоры слишком продвинуты для этого.
Стоимость зависит от многих факторов. Процессор имеет возможность переупорядочивать инструкции и выполнять инструкции вашей функции параллельно, а также параллельно с другими инструкциями даже из другого потока (если ядро поддерживает одновременную многопоточность). Цели ветвей «догадываются» и выполняются до того, как условие будет полностью оценено. Если «догадка» оказывается неправильной, вычисления отбрасываются. Предположения основаны на некоторой статистике, собранной процессором. Разница во времени выполнения в случае, если код находится в кеше, а в случае, если он не может быть огромным. Даже если бы вы смогли определить, что выполнение функции в некоторых случаях выполнялось в течение x
циклов, при следующем запуске кода вы можете получить y
и y
может отличаться от x
.
Если у вас есть простой микроконтроллер, и в документации четко указано, сколько циклов синхронизации занимает каждая инструкция, вы можете выполнить разборку своей функции и добавить затраты на все инструкции, из которых она состоит.
Профиль -> реализовать только 0,000001% от времени выполнения программы -> сосредоточиться на чем-то, что имеет значение. – delnan
@ delnan: Это должен быть ответ, а не комментарий, если вы действительно этому верите :) – leoger