Почему встраивание считается быстрее, чем вызов функции? - PullRequest
39 голосов
/ 25 октября 2010

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

Из того, что я помню, когда вызывается функция, скажем, f (x, y), x и y помещаются в стек, а указатель стека переходит в пустой блок и начинает выполнение. Я знаю, что это немного упрощает, но я что-то упустил? Несколько нажатий и прыжок для вызова функции, неужели так много накладных расходов?

Дай мне знать, если я что-то забуду, спасибо!

Ответы [ 16 ]

2 голосов
/ 25 октября 2010

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

1 голос
/ 25 октября 2010

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

Иногда выгода от отсутствия вызова функции перевешивает потенциальную стоимость дополнительного кода, иногда нет.

1 голос
/ 25 октября 2010

Подстановка функции - это предложение компилятору заменить вызов функции на определение.Если его заменить, тогда не будет функции, вызывающей стек операций [push, pop].Но это не гарантировано всегда.:)

- ура

1 голос
/ 25 октября 2010

Потому что нет звонка. Код функции только что скопирован

0 голосов
/ 25 октября 2010

Подстановка имеет большое значение, когда функция вызывается несколько раз.

0 голосов
/ 25 октября 2010

Поскольку прыжок не выполняется.

...