Стек - это область памяти, в которой содержатся аргументы подпрограмм, локальные переменные и адреса возврата из подпрограмм.
На многих архитектурах, включая Intel, стек растет сверху вниз - это означает, что указатель стека уменьшаетсякаждый раз, когда данные помещаются в стек.
Типичная последовательность вызовов функций будет выглядеть следующим образом:
- Push-аргументы
- Перейти к подпрограмме (которая выдвигаетадрес возврата в стек)
- В некоторых языках (например, Pascal) базовый указатель помещается в стек.
- Вызываемая подпрограмма выделяет место в стеке для своих локальных переменных.
Чтобы произвести трассировку стека, среда выполнения просто сканирует стек, чтобы определить, куда указывают адреса возврата.Я написал «просто», но не все так просто, если базовые указатели не были сохранены в стеке, потому что было бы невозможно определить, где находятся какие-либо кадры стека, кроме текущего.