Как я знаю последнюю инструкцию я был - PullRequest
0 голосов
/ 06 октября 2019
int testFun(int A)
{
   return A+1;
}
int main()
{
   int x=0;
   int y= testFun(x)
   cout<<y;
}

Как мы знаем, стек сохраняет локальные переменные, что означает, что когда я был в главной функции, в стеке были переменные (x и y), а когда я вызывал функцию (testFun), в стеке была переменная(A) и когда я возвращаюсь из (testFun), в стеке появляется последний кадр. Но вот вопрос, когда я возвращаюсь из (testFun), как узнать, какое последнее место было в главной функции перед вызовом (testFun)

1 Ответ

2 голосов
/ 06 октября 2019

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

Компилятор анализирует код и генерирует машинные инструкциикоторые работают на процессоре. Вызов функции создает инструкцию CALL. Когда функция завершается, для возврата вызывающему абоненту используется инструкция RET.

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

Инструкция RET извлекает этот адрес из стека вызовов, а затем переходит на указанный адрес.

...