2016-11-16 148 views
-1

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

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

(由“堆”我指的是存储器,其中线程存储执行迹线和参数,如果有任何不确定性。)

回答

0

忽略这一事实的堆栈大小最终由它在其上运行的硬件约束,有动态堆栈。看看Go编程语言:https://golang.org它有一个'无限'堆栈。

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