почему для встроенной функции компилятор будет пытаться генерировать код в каждой точке вызова - PullRequest
0 голосов
/ 17 апреля 2019

В настоящее время я изучаю встроенную функцию c ++, прочитав Bjarne Stroustrup Programming_ Принципы и практика с использованием C ++.

Автор упомянул

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

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

1 Ответ

2 голосов
/ 17 апреля 2019

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

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

...