【发布时间】:2011-01-09 02:43:55
【问题描述】:
如果您将某个东西多次压入堆栈(例如在循环中),堆栈是继续增长还是之前的值被替换?例如,重复推送 EDI 5 次。堆栈会有 5 个 EDI 吗?
【问题讨论】:
如果您将某个东西多次压入堆栈(例如在循环中),堆栈是继续增长还是之前的值被替换?例如,重复推送 EDI 5 次。堆栈会有 5 个 EDI 吗?
【问题讨论】:
堆栈不断增长,直到达到某个操作系统定义的限制。然后抛出异常。此限制在 PC 上通常为 256k 甚至兆字节,以允许递归。
堆栈不保存类型,所以由于 EDI 是一个 32 位寄存器,5 次 push edi 后它将包含 5 个 32 位值,与 EDI 中的值相同
【讨论】:
堆栈是否不断增长
是的。这就是为什么它被称为“堆栈”。这是一个非常基本的属性,因为它允许递归调用(子例程使用不同的参数调用自身)。
【讨论】:
什么都没有生长。每次推送内容时,堆栈指针寄存器都会简单地递增(或递减,具体取决于 CPU 架构),因此它指向一个新的但现有的内存位置。
这通常被称为堆栈“增长”,但实际上与 C 中所说的一样:
int stack[100];
int sp = 0;
stack[sp++] = 42; // push
CPU 堆栈,就像上面的数组一样,是固定大小的,当它耗尽时,会发生某种错误(再次取决于架构)。
【讨论】: