-6

我正在研究 java 堆栈,只是对这个特定场景中的指针感到好奇。

当我们将一个对象或一个节点压入堆栈时,这点在哪里:

  • 在第一个节点的前面?
  • 在第一个节点的后面?

任何人都可以帮助我或提供一些演示链接来描述堆栈中的堆栈推送和弹出节点吗?并详细说明指针在任何给定时间指向的位置。

4

3 回答 3

3

这是堆栈的工作方式:

你像这样将元素推入其中。新添加的元素始终处于“顶部”,因为它是后进先出 (LIFO) 结构。您只能访问顶部元素:

堆栈推送

然后你可以弹出这些元素,但 pop 总是删除最上面的元素,像这样:

在此处输入图像描述

如果我误解了您的问题,请发表评论,我将删除此帖子!

于 2012-07-29T09:49:20.343 回答
2

我正在研究java堆栈,我只是对这个指针感到好奇。

Java 使用虚拟机。字节码需要在真机上运行。这意味着在虚拟意义上,虽然它使用堆栈来推送和弹出值,但它被编译为使用多个寄存器(例如 8 到 16)的本机代码,并且具有选择性使用的 CPU 堆栈(因为它是慢点)

您可以成为一名经验丰富的 Java 开发人员,但对 Java 堆栈或它如何虚拟工作或它如何转换为本机代码一无所知。作为初学者,可能还有其他一些更有用的知识。;)

于 2012-07-29T09:58:23.667 回答
1

不幸的是,这个问题无法用 Java 来回答。

Java 虚拟机确实有概念堆栈——一个用于线程的本地帧,另一个用于计算表达式时的操作数。但是,这些是概念堆栈,可能会或可能不会使用本机代码“堆栈指针”来实现。当然,本机代码堆栈/堆栈指针的任何使用都是实现细节

如果您想了解本机堆栈/堆栈指针的工作原理,最好阅读处理器架构、指令集和汇编语言编程。或者,调用堆栈上的 Wikipedia 页面对它们的工作方式给出了 ISA 中立的描述。

于 2012-07-29T10:22:58.930 回答