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