Так, например, когда main вызывает f1, main внесет аргументы для f1, поверх стека.
И когда f1 начнет выполнение, она вытолкнет или удалит элементы из верхней части стека и будет использовать их для выполнения.
Точно так же, когда f1 вызовет f2, f1 разместит аргументы на вершине стека для f2, а затем f2 вытолкнет их из стека, выполнится, а затем поместит значения результата поверх стека.
f1 затем вытолкнет результат из стека.
И, наконец, когда f1 нужно вернуть значение, она внесет его в верхнюю часть стека.
И когда выполнение вернется к main, она удалит значение из верхней части стека.
Таким образом, стек является важной частью состояния процесса, потому что он сообщает вам, в каком месте исполнения программы вы находитесь, в отношении функций, вызывающих друг друга.
И наконец, функции могут иметь локальные переменные, такие как x.
Там могут быть и глобальные переменные, и, конечно, в объектно-ориентированных программах, у вас есть объекты, которые хранят много полей.
Эти данные хранятся в том, что называется кучей.
Куча – это, по существу, данные, которые были созданы методами, или объектами.
И эти данные также появляются в куче и удаляются из нее в процессе выполнения программы.
Также есть регистры, которые содержат недавние значения, к которым был получен доступ процессом.
Давайте посмотрим упрощенную версию компьютерной архитектуры.
Здесь есть процессор, который выполняет инструкции, которые присутствуют в вашем коде.
Также есть регистры, которые расположены вместе с процессором.
Это небольшие части памяти, к которым CPU можно быстро получить доступ.
И как правило, существует только небольшое количество регистров, не более нескольких десятков регистров.
Также есть кеш, который является немного большей памятью, чем набор регистров.
И чем больше память, тем медленнее доступ к ней.
Таким образом, доступ к кешу медленнее доступу к регистрам.
Но доступ к кешу все еще довольно быстрый.
Помимо кэша также есть основная память, или Random Access Memory, или RAM, которая еще больше, чем кеш, а, следовательно, медленнее, чем кеш.
И, наконец, есть жесткий диск, у которого намного больше памяти, чем у основной памяти, и доступ к ней еще медленнее.
Таким образом, по мере того, как вы поднимаетесь от диска, к основной памяти, кешу, регистрам, увеличивается скорость и уменьшается память.