在内存中,有一个名为堆栈的部分,它从顶部开始向下增长,直到堆区。这个堆栈和LIFO堆栈是一样的吗?底部的堆是否是FIFO?
当你执行“push”和“pop”操作时,会改变内存中的堆栈吗?
在内存中,有一个名为堆栈的部分,它从顶部开始向下增长,直到堆区。这个堆栈和LIFO堆栈是一样的吗?底部的堆是否是FIFO?
当你执行“push”和“pop”操作时,会改变内存中的堆栈吗?
内存有一个很大的堆栈,但是有一个指向堆栈顶部的栈指针。在push时,它会上升,在pop时,它会下降。但通常你可以通过修改指针来作弊,这样你就可以得到一个已经被弹出的值。
并不是所有的体系结构都将堆栈定向相同。最终这一点并不重要。有些系统在push时增加堆栈指针,在pop时减少;另一些系统则在push时减少堆栈指针,在pop时增加。
例如:栈指针位于0x100,并且它是一个递增的系统。 然后你push,栈指针位于0x104。再次push,位于0x108。pop回到0x104。 另一个系统将从0x100开始,向下推到0xfc,然后推到0xf8,并弹回到0xfc。如果你再次pop,你回到了0x100。如果你从栈指针中减去8,它就回到了0xf8,所以你可以再次pop它们。(或者,C编译器在函数结束时会执行的操作,只需从栈指针中添加/减去12,而不是用三个指令弹出3个局部变量。)