数据结构栈和硬件栈有区别吗?
Is there a difference between data structure stack and hardware stack?
我和朋友争论过数据结构栈和硬件栈(调用栈)的区别。我认为它们完全相同,因为它们都有 'push' 和 'pop' 只能处理最新的元素。但是我的朋友说他们根本不一样,他们只是共享相同的名字,'stack'。他这么认为是因为在调用堆栈中,我们可以访问不是最新地址的地址,这与堆栈(数据结构)的定义相矛盾。你能回答这个问题吗?
第一个是数据结构,第二个是应用的数据结构。
与现实世界中的大多数数据结构应用程序一样,它不是纯粹的,而是为了方便或速度而添加的功能。
这里有一些区别:
- 通常你只能有一个硬件堆栈(每个线程)。
- 您可以根据需要拥有任意数量的软件堆栈。
- 通常硬件堆栈由CPU直接管理。
- 软件堆栈访问是通过代码明确管理的。
- 硬件堆栈通常与调用堆栈(调用函数及其参数)直接相关。
- 软件堆栈独立于硬件调用堆栈(您可以在一个函数中压入项目并在另一个函数中弹出它们,而与硬件堆栈级别无关)。
- 硬件堆栈内存由 OS 或 CPU 管理(可能有限)。
- 软件堆栈内存由应用程序管理。
基本上两个堆栈都有 push 和 pop 操作,因此像堆栈一样工作。
纯或非纯硬件或软件堆栈是可能的。通常,硬件堆栈能够从参数的顶部访问相对位置的项目。在软件堆栈上,通常保护本质上是私有访问。
在某些嵌入式设备上,堆栈可能仅用于 returns 地址,并且参数可能需要基于软件的堆栈。在某些设备上,最大级别可能非常低。
我和朋友争论过数据结构栈和硬件栈(调用栈)的区别。我认为它们完全相同,因为它们都有 'push' 和 'pop' 只能处理最新的元素。但是我的朋友说他们根本不一样,他们只是共享相同的名字,'stack'。他这么认为是因为在调用堆栈中,我们可以访问不是最新地址的地址,这与堆栈(数据结构)的定义相矛盾。你能回答这个问题吗?
第一个是数据结构,第二个是应用的数据结构。
与现实世界中的大多数数据结构应用程序一样,它不是纯粹的,而是为了方便或速度而添加的功能。
这里有一些区别:
- 通常你只能有一个硬件堆栈(每个线程)。
- 您可以根据需要拥有任意数量的软件堆栈。
- 通常硬件堆栈由CPU直接管理。
- 软件堆栈访问是通过代码明确管理的。
- 硬件堆栈通常与调用堆栈(调用函数及其参数)直接相关。
- 软件堆栈独立于硬件调用堆栈(您可以在一个函数中压入项目并在另一个函数中弹出它们,而与硬件堆栈级别无关)。
- 硬件堆栈内存由 OS 或 CPU 管理(可能有限)。
- 软件堆栈内存由应用程序管理。
基本上两个堆栈都有 push 和 pop 操作,因此像堆栈一样工作。
纯或非纯硬件或软件堆栈是可能的。通常,硬件堆栈能够从参数的顶部访问相对位置的项目。在软件堆栈上,通常保护本质上是私有访问。
在某些嵌入式设备上,堆栈可能仅用于 returns 地址,并且参数可能需要基于软件的堆栈。在某些设备上,最大级别可能非常低。