为什么堆栈有界?

时间:2016-11-16 07:31:49

标签: architecture platform

在我使用的任何平台上,堆栈大小总是有限的。您必须在某个时刻(在程序启动之前)指定最大堆栈大小,并且它已预先分配。为什么堆栈不能是驻留在堆内存中的链表?然后它几乎是无限的。它是当今所有计算机架构的固有属性吗?

我的问题与任何特定的编程语言或平台无关。这是纯粹的学术好奇心。

('stack'我的意思是线程存储执行跟踪和参数的内存,如果有任何歧义。)

2 个答案:

答案 0 :(得分:0)

忽略堆栈大小最终受其运行的硬件限制的事实,存在动态堆栈。看看Go编程语言:https://golang.org它有一个“无限制”的语言。叠加。

Goroutines的一个主要特点是成本;它们在初始内存占用方面创建起来很便宜(相对于使用传统POSIX线程的1到8兆字节),并且它们的堆栈会根据需要增长和缩小。这允许Goroutine以单个4096字节堆栈开始,该堆栈根据需要增长和缩小,而没有耗尽的风险。 (来自https://dave.cheney.net/2013/06/02/why-is-a-goroutines-stack-infinite

答案 1 :(得分:0)

有SegmentedStacks!

  

目前正在开发支持x86 / Linux上的分段堆栈。

http://releases.llvm.org/3.0/docs/SegmentedStacks.html