C++ 堆栈的基础知识

C++ 堆栈的基础知识,c++,assembly,stack,C++,Assembly,Stack,我有一个关于堆栈的快速问题,我想了一会儿 如果您给变量一个值,然后将它们推入堆栈,那么一旦将它们放入堆栈中,它们是否仍然包含相同的值,或者这些值是否会变为“null”,并且您必须在堆栈中更改它们 按照我的理解,一旦你从堆栈中弹出一个变量,它就会返回到变量被推之前的值,对吗?但是当变量也被推送时,它会保持它的值吗 提前谢谢 For:push something对原始文件没有影响,除非您push esp,因为push指令通常修改esp(或sp或rsp,具体取决于当前处理器模式) Pop将用堆栈顶部的

我有一个关于堆栈的快速问题,我想了一会儿

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

按照我的理解,一旦你从堆栈中弹出一个变量,它就会返回到变量被推之前的值,对吗?但是当变量也被推送时,它会保持它的值吗

提前谢谢

For:push something对原始文件没有影响,除非您
push esp
,因为
push
指令通常修改
esp
(或
sp
rsp
,具体取决于当前处理器模式)

Pop将用堆栈顶部的当前内容覆盖寄存器/位置的当前内容。这将恢复以前的值,如果且仅当推送和弹出是平衡的,因此

例如:如果使用移动语义,推送某些内容可能会破坏原始内容。有可能使事情过载,否则同样的事情也会发生,但这通常是不可取的(至少可以这么说)

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

原因:推送某个内容对原始内容没有影响,除非您
推送esp
,由于
PUSH
指令通常修改
ESP
(或
sp
rsp
,具体取决于当前处理器模式)

Pop将用堆栈顶部的当前内容覆盖寄存器/位置的当前内容。这将恢复以前的值,如果且仅当推送和弹出是平衡的,因此

例如:如果使用移动语义,推送某些内容可能会破坏原始内容。有可能使事情过载,否则同样的事情也会发生,但这通常是不可取的(至少可以这么说)

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

原因:推送某个内容对原始内容没有影响,除非您
推送esp
,由于
PUSH
指令通常修改
ESP
(或
sp
rsp
,具体取决于当前处理器模式)

Pop将用堆栈顶部的当前内容覆盖寄存器/位置的当前内容。这将恢复以前的值,如果且仅当推送和弹出是平衡的,因此

例如:如果使用移动语义,推送某些内容可能会破坏原始内容。有可能使事情过载,否则同样的事情也会发生,但这通常是不可取的(至少可以这么说)

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

原因:推送某个内容对原始内容没有影响,除非您
推送esp
,由于
PUSH
指令通常修改
ESP
(或
sp
rsp
,具体取决于当前处理器模式)

Pop将用堆栈顶部的当前内容覆盖寄存器/位置的当前内容。这将恢复以前的值,如果且仅当推送和弹出是平衡的,因此

例如:如果使用移动语义,推送某些内容可能会破坏原始内容。有可能使事情过载,否则同样的事情也会发生,但这通常是不可取的(至少可以这么说)


弹出仅从堆栈中删除一项。您从堆栈顶部复制一个项目(或可以以类似堆栈的方式使用的集合,如
vector
deque
),然后分别弹出以从堆栈中删除该项目。

这就是我们所说的,对吗?在堆栈上推送变量与推送不同,例如,将橘子放入袋子:语义是复制,而不是移动。这就像把你的橘子放进一个袋子里,并把它保存起来。这就是我们所说的,对吧?把一个变量放在堆栈上不同于把一个橘子放进袋子里:语义是复制,而不是移动。这就像把你的橘子放进一个袋子里,并把它保存起来。这就是我们所说的,对吧?把一个变量放在堆栈上不同于把一个橘子放进袋子里:语义是复制,而不是移动。这就像把你的橘子放进一个袋子里,并把它保存起来。这就是我们所说的,对吧?把一个变量放在堆栈上不同于把一个橘子放进袋子里:语义是复制,而不是移动。非常感谢你的帮助杰瑞:)非常感谢你的帮助杰瑞:)非常感谢你的帮助杰瑞:)非常感谢你的帮助杰瑞:)非常感谢你的帮助杰瑞:)非常感谢你的帮助杰瑞:)