Сначала небольшое уточнение.Стеки не обязательно в DRAM.это просто структура, которая может быть сформирована в любой памяти: DRAM, кэши, диск.
Чтобы понять стек, вы должны сначала понять, что такое стек.Это похоже на стопку лотков, свойства, которые делают ее стопкой:
- Вы можете получить доступ только к верхнему элементу стопки
- Это последний поступивший первым, т.е., когда вы идете, чтобы получить данные из стека, вы получите данные, которые были сохранены последними в стеке.
Акт сохранения чего-либо в стеке называется PUSH, а удаление - POP.Скажем, я делаю следующее для пустого стека:
PUSH A
PUSH B
PUSH C
Тогда в стеке будет
C - Top
B
A
Теперь, если я выполню POP (обратите внимание, что здесь нет операнда), он будетвозвратите C, и стек будет содержать
B -- top of stack
A
Таким образом, стек в процессорах является лишь аппаратной реализацией вышеуказанного алгоритма.
Регистр содержит адрес вершины стека, называемый точка стека ISA (архитектура набора инструкций) предоставляет инструкции PUSH и POP для доступа к переменным стека, как я показал выше.
Это очень полезная конструкция.Стек используется для хранения локальных переменных, в основном временных данных, которые вы хотите удалить в конце вызова функции.Это особенно помогает с вызовами функций.Когда вызывается функция, переменные локальных переменных вновь вызванной функции помещаются в стек.
foo(){
int a;
int b; // both registers containing a and b are PUSHed here on the stack
c = bar(); // pop the stack to get value of c
print c
}
bar(){
int z; // local variables pushed on top of the stack
z = ...
return z; // pop all local variables of bar(), then push z on the stack
}
Надеюсь, вышесказанное поможет.