数据结构栈和硬件栈有区别吗?

Is there a difference between data structure stack and hardware stack?

我和朋友争论过数据结构栈和硬件栈(调用栈)的区别。我认为它们完全相同,因为它们都有 'push' 和 'pop' 只能处理最新的元素。但是我的朋友说他们根本不一样,他们只是共享相同的名字,'stack'。他这么认为是因为在调用堆栈中,我们可以访问不是最新地址的地址,这与堆栈(数据结构)的定义相矛盾。你能回答这个问题吗?

第一个是数据结构,第二个是应用的数据结构。

与现实世界中的大多数数据结构应用程序一样,它不是纯粹的,而是为了方便或速度而添加的功能。

这里有一些区别:

  • 通常你只能有一个硬件堆栈(每个线程)。
  • 您可以根据需要拥有任意数量的软件堆栈。
  • 通常硬件堆栈由CPU直接管理。
  • 软件堆栈访问是通过代码明确管理的。
  • 硬件堆栈通常与调用堆栈(调用函数及其参数)直接相关。
  • 软件堆栈独立于硬件调用堆栈(您可以在一个函数中压入项目并在另一个函数中弹出它们,而与硬件堆栈级别无关)。
  • 硬件堆栈内存由 OS 或 CPU 管理(可能有限)。
  • 软件堆栈内存由应用程序管理。

基本上两个堆栈都有 pushpop 操作,因此像堆栈一样工作。

纯或非纯硬件或软件堆栈是可能的。通常,硬件堆栈能够从参数的顶部访问相对位置的项目。在软件堆栈上,通常保护本质上是私有访问。

在某些嵌入式设备上,堆栈可能仅用于 returns 地址,并且参数可能需要基于软件的堆栈。在某些设备上,最大级别可能非常低。