【问题标题】:Are stack and heap memory actually implemented as stack and heap data structures?堆栈和堆内存实际上是作为堆栈和堆数据结构实现的吗?
【发布时间】:2016-08-13 02:30:11
【问题描述】:

我想知道stack和heap内存中所指的stack和heap是否真的实现为stack和heap数据结构?

我认为堆栈实际上是一个堆栈,它具有指向函数中声明的 LIFO(后进先出)变量的指针,但是我想确认并询问堆是否与动态树数据结构共享的不仅仅是其名称满足堆属性?我最近阅读了很多关于堆栈和堆的内容,并且相信我理解了这个概念,但是它让我对实际的实现感到好奇。我想它在不同的架构上也可能有所不同,并且可能没有针对所有计算机和操作系统的具体通用答案。

如果有人遇到这个问题但仍然不确定堆栈和堆是什么以及在哪里,请查看这个问题以及我发现对学习堆栈和堆概念有用的其他链接。

What and where are the stack and heap? http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html http://www.programmerinterview.com/index.php/data-structures/difference-between-stack-and-heap/ https://www.youtube.com/watch?v=_8-ht2AKyH4

【问题讨论】:

标签: data-structures stack heap heap-memory stack-memory


【解决方案1】:

内存堆绝对不是堆数据结构。也就是说,它不是优先级队列。我想你可以使用优先级队列堆来构建内存堆,但是有更好的方法来做到这一点。

堆栈是……嗯……通常,堆栈是分配给进程的固定内存块。处理器本身将该块内存视为纯堆栈。也就是说,处理器的栈指针指向栈顶,push和pop指令按预期工作,向栈中添加东西和从栈中移除东西。这样一来,它就是 LIFO。

然而,处理器可以用堆栈做各种事情:推送和弹出不同大小的东西,直接向其中寻址(即查看第三项而不弹出前两项)等等。所以虽然处理器堆栈确实有push 和 pop 指令,它还具有更多的扩展功能。我不会称它为纯粹的 LIFO 数据结构。

【讨论】:

    【解决方案2】:

    堆内存:不一定是堆数据结构。堆用作虚拟内存上的非固定大小的内存区域,它向程序员公开的功能是分配和释放。堆可以用各种数据结构来实现。关于原生 C 和 C++ 开发,堆内存结构将由您使用的分配器定义。他们将负责管理必要的数据结构和虚拟内存。在下面的链接中,您可以看到 Windows、Linux 和 MacOS 上的默认实现:http://core-analyzer.sourceforge.net/index_files/Page335.html

    堆栈内存:它不必实现为堆栈(先进后出)数据结构,但是它公开的功能(不向程序员)是以堆栈数据的形式结构体。 (处理器会将操作系统提供的内存视为堆栈数据结构)它是虚拟内存上固定大小的内存区域。在现代操作系统中,堆栈将是每个线程的,您也可以通过在 Linux 中使用 ulimit 来定义该限制,另一方面在 Windows 端它是一个链接器参数:https://msdn.microsoft.com/en-US/library/8cxs58a6(v=vs.120).aspx

    这也是另一个不错的阅读:http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 2015-11-15
      • 2018-06-02
      • 2010-11-15
      • 1970-01-01
      • 2014-06-23
      • 2018-09-27
      • 2013-01-25
      • 2011-10-21
      相关资源
      最近更新 更多