问题标签 [stack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
14650 浏览

c - 在 C 中创建一个 FIFO 队列

是否可以在不使用 2 个堆栈的情况下在 C 中创建一个 FIFO“堆栈”?

谢谢!

(对不起那些回答前一个问题的人。我在想 LIFO,意思是 FIFO。)

0 投票
2 回答
1793 浏览

c# - 如何在 C# 中实现通用堆栈?

我正在使用 Visual C# 使用 Stack 编写 RPN 计算器。问题是我不知道该怎么做。我正在使用 System.Collections.Generic,但是

产生错误:

使用泛型类型“System.Collections.Generic.Stack”需要“1”类型参数

我在这里很无知。谢谢您的帮助。

0 投票
2 回答
9209 浏览

debugging - 调试 .NET CLR 应用程序时,如何查看评估堆栈上的局部变量?

我正在使用 Windbg(带有 sos 扩展名)并尝试调试崩溃的应用程序。我能够转储引发异常的调用的 IL,并且通过检查代码,如果我可以转储评估堆栈的内容,我似乎可以获得所需的信息。可以用 WinDbg & sos 做什么吗?

这是我所做的:

  1. 启动 WinDbg
  2. 附加到崩溃的进程
  3. loadby sos mscorwks (加载 sos 扩展)
  4. !token2ee theModuleName 0600009a (其中theModuleName是我正在调试的应用程序(和程序集)的名称,9a是 Windows 错误报告工具报告的崩溃方法的方法偏移量。我得到了这个输出:

    模块:000e2c3c (theApplicationName.exe)
    令牌:0x0600009a
    MethodDesc:000e67c8
    名称:MyNamespace.MyClassName.theCulpritFn(MyOtherClass)
    JITTED 代码地址:0081b1d0

  5. !dumpil 00e67c8 (它为所讨论的方法转储了 IL)。这是输出:

    问题是:有没有办法让我看到在抛出异常之前压入堆栈的内容。如果我没记错的话,传递给异常构造函数的参数应该是评估堆栈上索引 0 处的局部变量。

    PS 当我尝试调用!clrstack -a时,我收到一条消息:无法遍历托管堆栈。当前线程可能不是托管线程。您可以运行 !threads 以获取进程中的托管线程列表。

谢谢!

0 投票
2 回答
1421 浏览

c - 复制堆栈是什么意思?

我正在阅读The C Programming Language并学习了如何使用堆栈制作逆波兰计算器。以下是其后的练习之一:

练习 4-4。添加命令以打印堆栈的顶部元素而不弹出,复制它,并交换顶部的两个元素。添加清除堆栈的命令。

他们所说的“重复”是什么意思?这意味着打印出整个堆栈,还是将整个堆栈压入自身(例如,“1 2 3”将变为“1 2 3 1 2 3”),还是什么?

0 投票
5 回答
35122 浏览

c++ - std::stack 是否公开迭代器?

C++ STL 中的是否std::stack公开了底层容器的任何迭代器,还是应该直接使用该容器?

0 投票
3 回答
911 浏览

variables - 如何访问堆栈上的变量?

假设我们有这些局部变量:

据我所知,这些将分配在系统堆栈上,如下所示:

这是否意味着为了得到a的值,必须首先将d、c和b的值从堆栈中弹出?如果是这样,这些值在哪里?这是否意味着访问最近声明的变量会更快?还是我错过了什么(我怀疑是这种情况),而整个事情以其他方式起作用?

编辑:谢谢,伙计们!

0 投票
6 回答
724 浏览

c# - 什么时候结构不在堆栈上?

我正在阅读 Jon Skeet 的书评,他正在研究Head First C#的许多不准确之处。

其中一个引起了我的注意:

[在错误部分下] 声称结构始终存在于堆栈中。

在什么情况下结构不会存在于堆栈中?这与我认为我对结构的了解相反。

0 投票
7 回答
2657 浏览

python - 是否可以以编程方式构造 Python 堆栈帧并在代码中的任意点开始执行?

是否可以在 CPython 中以编程方式构造一个堆栈(一个或多个堆栈帧)并在任意代码点开始执行?想象以下场景:

  1. 您有一个工作流引擎,其中的工作流可以用 Python 编写脚本,其中包含一些调用工作流引擎的结构(例如分支、等待/加入)。

  2. 阻塞调用(例如等待或加入)在具有某种持久后备存储的事件调度引擎中设置侦听器条件。

  3. 您有一个工作流脚本,它调用引擎中的等待条件,等待稍后将发出信号的某些条件。这会在事件分派引擎中设置侦听器。

  4. 工作流脚本的状态,包括程序计数器(或等效状态)在内的相关堆栈帧被保留 - 因为等待条件可能会在几天或几个月后发生。

  5. 在此期间,工作流引擎可能会停止并重新启动,这意味着必须能够以编程方式存储和重建工作流脚本的上下文。

  6. 事件调度引擎触发等待条件拾取的事件。

  7. 工作流引擎读取序列化状态和堆栈,并使用堆栈重建线程。然后它在调用等待服务的地方继续执行。

问题

这可以用未经修改的 Python 解释器来完成吗?更好的是,谁能指出一些可能涵盖此类事情的文档或以编程方式构造堆栈帧并在代码块中间某处开始执行的代码示例?

编辑:为了澄清“未修改的 python 解释器”,我不介意使用 C API(PyThreadState 中是否有足够的信息来做到这一点?)但我不想去探索 Python 解释器的内部结构并拥有建立一个修改过的。

更新:通过一些初步调查,可以使用PyThreadState_Get(). 这将返回 a 中的线程状态PyThreadState(在 中定义pystate.h),该状态具有对 中的堆栈帧的引用frame。堆栈帧保存在 struct typedef'd to 中PyFrameObject,该结构定义在frameobject.h. PyFrameObject有一个字段f_lasti(对bobince的道具),它有一个程序计数器,表示为距代码块开头的偏移量。

最后一点是个好消息,因为这意味着只要您保留实际编译的代码块,您就应该能够根据需要为尽可能多的堆栈帧重建局部变量并重新启动代码。我想说这意味着理论上可以不必修改python解释器,尽管这意味着代码仍然可能会与特定版本的解释器紧密耦合。

剩下的三个问题是:

  • 事务状态和“传奇”回滚,这可能可以通过一种用于构建 O/R 映射器的元类黑客来完成。我确实构建了一次原型,所以我对如何实现这一点有一个很好的了解。

  • 稳健地序列化事务状态和任意局部变量。这可以通过读取__locals__(可从堆栈帧中获得)并以编程方式构造对 pickle 的调用来完成。但是,我不知道这里可能存在什么问题(如果有的话)。

  • 工作流的版本控制和升级。这有点棘手,因为系统没有为工作流节点提供任何符号锚。我们只有锚点 为了做到这一点,我们必须识别所有入口点的偏移量并将它们映射到新版本。手动操作可能可行,但我怀疑很难自动化。如果您想支持此功能,这可能是最大的障碍。

更新 2: PyCodeObject ( code.h) 中有一个 addr ( f_lasti)-> 行号映射列表PyCodeObject.co_lnotab(如果此处错误,请纠正我)。这可能用于促进将工作流更新到新版本的迁移过程,因为冻结的指令指针可以映射到新脚本中的适当位置,根据行号完成。仍然很混乱,但更有希望。

更新 3:我认为这个问题的答案可能是Stackless Python。 您可以暂停任务并将它们序列化。我还没有弄清楚这是否也适用于堆栈。

0 投票
17 回答
141566 浏览

assembly - 堆栈在汇编语言中是如何工作的?

我目前正在尝试了解堆栈是如何工作的,所以我决定自学一些汇编语言,我正在使用这本书:

http://savannah.nongnu.org/projects/pgubook/

我正在使用Gas并在Linux Mint上进行开发。

我有点困惑:

据我所知,堆栈只是一种数据结构。所以我假设如果我在汇编中编码,我必须自己实现堆栈。然而,情况似乎并非如此,因为有类似的命令

因此,在为x86架构编写汇编代码并使用 Gas 语法时:堆栈只是已经实现的数据结构吗?或者它实际上是在硬件级别实现的?或者是别的什么?其他芯片组的大多数汇编语言也是否已经实现了堆栈?

我知道这是一个有点愚蠢的问题,但我实际上对此感到很困惑。

0 投票
2 回答
2169 浏览

c++ - 从 C++ 检查 Lua 堆栈项的值

如何检查 Lua 中堆栈顶部的值?

我有以下 C++ 代码:

有问题的文件的内容是

有任何想法吗?