Какова стоимость вызова функции? - PullRequest
33 голосов
/ 18 сентября 2008

По сравнению с

  • Простой доступ к памяти
  • Доступ к диску
  • Доступ к памяти на другом компьютере (в той же сети)
  • Доступ к диску на другом компьютере (в той же сети)

в C ++ для Windows.

Ответы [ 15 ]

0 голосов
/ 18 сентября 2008

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

Итак .. говоря относительно:

  • Вызов функции> Простой доступ к памяти.
  • Вызов функции << Доступ к диску - по сравнению с памятью он может быть в сотни раз дороже. </li>
  • Вызов функции << Доступ к памяти на другом компьютере - пропускная способность сети и протокол здесь являются главными убийцами времени. </li>
  • вызов функции <<< Доступ к диску на другом компьютере - все вышеперечисленное и многое другое:) </li>
0 голосов
/ 18 сентября 2008

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

0 голосов
/ 18 сентября 2008

Если функция встроена во время компиляции, стоимость функции становится равной 0.

0, конечно, то, что вы получили бы, если бы не было вызова функции, то есть: сами сделали это.

Это, конечно, звучит слишком очевидно, когда я так пишу.

0 голосов
/ 18 сентября 2008

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

0 голосов
/ 18 сентября 2008

Зависит от того, что делает эта функция, она заняла бы второе место в вашем списке, если бы выполняла логику с объектами в памяти. Далее вниз по списку, если он включает доступ к диску / сети.

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