堆栈基础知识

时间:2013-11-21 00:44:48

标签: c++ assembly stack push pop

我有一个关于堆栈的快速问题,我一直想知道。

如果给变量赋值,然后将它们推入堆栈,一旦它们被放入堆栈中,它们是否仍然包含相同的值,或者值是否会变为“空”并且您必须在堆栈中更改它们?

我理解它的方式,一旦你从堆栈中弹出变量,它将返回到推送变量之前的值,对吗?但是,当它被推动时,变量是否会保留其价值?

提前致谢!

1 个答案:

答案 0 :(得分:3)

对于:除非push esp,否则推送内容对原始内容没有影响,因为PUSH指令通常会修改ESP(或sprsp,具体取决于当前的处理器模式。)

Pop将使用当前位于堆栈顶部的任何内容覆盖寄存器/位置的当前内容。当且仅当您的推送和弹出平衡时,这将恢复之前的值,因此您

对于:如果您使用移动语义,推送内容可以破坏原始内容。它可能会使事情过载,所以同样会发生这种情况,但这通常是不可取的(至少可以说)。

弹出只会从堆栈中删除一个项目。您可以从堆栈顶部复制项目(或者您可以以类似堆栈的方式使用的集合,例如vectordeque),然后单独弹出以从堆栈中删除该项目。