2010-01-25 2 views
1

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

ответ

2

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

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

1

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

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

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

стек процессора, как и выше массив, является фиксированный размер, и, когда это исчерпана некоторая ошибка (в очередной раз зависящая от архитектуры).

2

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

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

Смежные вопросы