1

如果您多次将某些内容推入堆栈(例如在循环中),堆栈是继续增长还是替换了先前的值?例如,重复推送 EDI 5 次。堆栈会有 5 个 EDI 吗?

4

3 回答 3

2

堆栈不断增长,直到达到某些操作系统定义的限制。然后抛出异常。在 PC 上,此限制通常为 256k 甚至兆字节,以允许递归。

堆栈不保存类型,因此由于 EDI 是一个 32 位寄存器,在 5 次 push edi 之后它将包含 5 个 32 位值,与 EDI 中的值相同

于 2010-01-25T13:53:09.850 回答
2

堆栈是否不断增长

是的。这就是为什么它被称为“堆栈”。这是一个非常基本的属性,因为它允许递归调用(其中子例程使用不同的参数调用自身)。

于 2010-01-25T13:56:05.923 回答
1

什么都没有生长。每次推送某个内容时,堆栈指针寄存器都会简单地递增(或递减,具体取决于 CPU 架构),因此它指向一个新的但现有的内存位置。

这通常被称为堆栈“增长”,但实际上与 C 中所说的相同:

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

CPU 堆栈,就像上面的数组一样,是固定大小的,当它用尽时,会发生某种错误(再次取决于架构)。

于 2010-01-25T13:55:25.977 回答