如果你多次将某些东西推入堆栈(例如循环),堆栈是否会继续增长或者是否替换了之前的值?例如,重复推EDI 5次。堆栈有5个EDI吗?
答案 0 :(得分:2)
堆栈不断增长,直到达到某个操作系统定义的限制。然后抛出异常。 PC上的此限制通常为256k甚至兆字节,以允许递归。
堆栈不保留类型,因此由于EDI是32位寄存器,在5次推送后,它将包含5个32位值,与EDI中的值相同
答案 1 :(得分:2)
堆栈是否继续增长
是。这就是为什么它被称为“堆栈”。这是一个非常基本的属性,因为它允许递归调用(子程序使用不同的参数调用自身)。
答案 2 :(得分:1)
什么都没有增长。每次推送时,堆栈指针寄存器都会递增(或递减,取决于CPU架构),因此它指向一个新的但现有的内存位置。
这通常被称为堆栈“增长”,但它与C中的说法完全相同:
int stack[100];
int sp = 0;
stack[sp++] = 42; // push
与上面的数组一样,CPU堆栈是固定大小的,当它耗尽时,会发生某种错误(再次依赖于体系结构)。