Вопрос про «пуш» и стек - PullRequest
       29

Вопрос про «пуш» и стек

1 голос
/ 25 января 2010

Если вы помещаете что-либо в стек несколько раз (например, в цикле), стек продолжает расти или заменяется предыдущее значение?Например, повторить нажатие EDI 5 раз.Будет ли в стеке 5 EDI?

Ответы [ 3 ]

2 голосов
/ 25 января 2010

стек продолжает расти

Да. Вот почему это называется «стек». Это очень фундаментальное свойство, поскольку оно допускает рекурсивные вызовы (когда подпрограмма вызывает себя с другими параметрами).

2 голосов
/ 25 января 2010

Стек продолжает расти, пока не будет достигнут определенный предел ОС. Затем выдается исключение. Это ограничение обычно составляет 256 КБ или даже мегабайт на ПК, чтобы обеспечить рекурсию.

Стек не хранит типы, поэтому, поскольку EDI является 32-битным регистром, после 5 push edi он будет содержать 5 32-битных значений, так же, как значение в EDI

1 голос
/ 25 января 2010

Ничего не растет. Регистр указателя стека просто увеличивается (или уменьшается, в зависимости от архитектуры ЦП) каждый раз, когда вы что-то нажимаете, поэтому он указывает на новую, но существующую область памяти.

Это часто называют «растущим» стеком, но в действительности это то же самое, что и в C:

int stack[100];
int sp = 0;
stack[sp++] = 42; // push

Стек ЦП, как и приведенный выше массив, имеет фиксированный размер, и когда он исчерпан, возникает какая-то ошибка (опять-таки зависящая от архитектуры).

...