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

时间:2019-03-05 00:49:10

标签: data-structures callstack

我已经和我的朋友讨论了数据结构堆栈和硬件堆栈(调用堆栈)之间的区别。我认为它们是完全一样的,因为它们都具有“推”和“弹出”功能,它们只能处理最新元素。但是我的朋友说,它们根本不一样,但是它们只具有相同的名称“堆栈”。他认为是因为在调用堆栈中,我们可以访问不是最新地址的地址,这与堆栈(数据结构)的定义相矛盾。你能给出答案吗?

2 个答案:

答案 0 :(得分:0)

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

就像现实世界中大多数数据结构的应用一样,它也不是纯净的,并且具有为方便或快速而添加的功能。

答案 1 :(得分:0)

有一些区别:

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

基本上,两个堆栈都具有 push pop 操作,因此可以像一个堆栈一样工作。

可能具有纯硬件或非纯硬件或软件堆栈。通常,硬件堆栈将能够从顶部开始在相对位置访问项目以获取参数。在软件堆栈上,通常,保护实际上是私有访问。

在某些嵌入式设备上,堆栈可能仅用于返回地址,而参数可能需要基于软件的堆栈。在某些设备上,最大级别可能会很低。