【问题标题】:Is it possible to reuse a value in a stack?是否可以重用堆栈中的值?
【发布时间】:2020-10-01 12:47:45
【问题描述】:

我希望这不是一个愚蠢的问题。我目前正在尝试将线程理解为它们的内存分配。在那里我遇到了堆栈的概念。而且我相信已经理解了 FIFO 的(相当简单的)概念,但我不明白的是:

如果我有一个线程并执行它,那么该方法将堆栈用于它的所有数据,但如果堆栈是 FIFO,那么您只能使用每条数据一次,因为一旦访问数据,从堆栈中弹出。但是如果我有一个使用 f.e. 的方法呢?变量的两倍或三倍? (编译的)进程是否提前知道,它必须将数据放入堆栈 3 次,因为它被使用了 3 次,或者这是如何工作的?

非常感谢您!

【问题讨论】:

  • 这是在问什么语言?
  • 一方面我想到了 Java,另一方面也想到了 C,在我的工作中我想将它们与 Google 的 Go 进行比较,因为我了解到 Go 处理并行化的方式完全不同。

标签: multithreading stack fifo


【解决方案1】:

通常,对函数或方法的每次调用都会获得自己的堆栈帧。推送和弹出的是堆栈帧,而不是单个变量。所以一个方法调用可以多次访问同一个变量,因为该方法调用使用同一个堆栈帧来引用它。

【讨论】:

  • 非常感谢您的回答。这对我来说更有意义。这与线程相同还是线程堆栈是“真正的”/“纯”FIFO 堆栈?
  • @Bantion:每个线程都有自己的堆栈帧堆栈。至少这在 C、Java 和 Lisp 中成立。 “与线程相同”没有多大意义,没有无线程版本。
猜你喜欢
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 2011-04-30
  • 1970-01-01
  • 2021-03-15
相关资源
最近更新 更多