From http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the- heap /
Вот последовательность шагов, которые выполняются, когда функция вызывается:
- Адрес инструкции, находящейся за пределами вызова функции, помещается в стек. Так ЦП запоминает, куда идти после функция возвращается.
- В стеке выделяется место для типа возвращаемого значения функции. Это пока просто заполнитель.
- ЦП переходит к коду функции.
- Текущая вершина стека хранится в специальном указателе, называемом фреймом стека.
- Все, что добавлено в стек после этого момента, считается «локальным» для функции.
- Все аргументы функции помещаются в стек.
- Инструкции внутри функции начинают выполняться.
- Локальные переменные помещаются в стек по мере их определения.
Я не уверен, как работает пункт №6. Если все аргументы функции помещены в стек, как к ним получить доступ?
Если, например, есть три аргумента a
, b
и c
и помещаются в стек таким образом сверху
| a |
| b |
| c |
| |
...
|___|
Что же происходит, когда функция хочет получить доступ к c
? Выскакивают ли a
и b
?