c++ - 堆栈基础

标签 c++ assembly stack

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

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

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

提前致谢!

最佳答案

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

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

对于 :如果您使用移动语义,插入某些东西可能会破坏原件。有可能使事情过载,所以同样的事情也会发生,但通常是非常不可取的(至少可以这么说)。

弹出只是从堆栈中移除一个项目。您从堆栈顶部复制一个项目(或您可以以类似堆栈的方式使用的集合,例如 vectordeque),然后分别弹出以删除堆栈中的那个项目。

关于c++ - 堆栈基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110256/

相关文章:

C++:埃拉托色尼筛法并不总是有效

c++ - 为哈希函数定义 c++20 概念

javascript - NodeJS - 日志记录 - 日志记录中的请求或堆栈号

c++ - 增加 Stack Size 的缺点以及 Stack Commit 和 Reserve 之间的区别

c - 为什么我无法在 C 中为我的结构创建新节点? (使用 Netbeans)

c++ - 在命名空间中定义 double 常量的最佳方法是什么?

c++ - 使用 std::atomic<T*> 作为围栏

ios - 混合 C 和汇编 xcode - 常量

assembly - 为什么在使用DIV指令之前EDX必须为0?

assembly - ARM 程序集加密扩展