Architecture 为什么堆栈有界?

Architecture 为什么堆栈有界?,architecture,platform,Architecture,Platform,在我使用过的任何平台上,堆栈大小总是有界的。您必须在某个点(在程序启动之前)指定最大堆栈大小,并且它是预先分配的。为什么堆栈不能是驻留在堆内存中的链表?那么它实际上是无限的。它是当今所有计算机体系结构的固有属性吗 我的问题与任何特定的编程语言或平台无关。这纯粹是学术好奇心 (我所说的“堆栈”是指线程存储执行跟踪和参数的内存,如果存在任何歧义。)忽略堆栈大小最终受其运行的硬件约束的事实,存在动态堆栈。看看Go编程语言:它有一个“无限”堆栈 Goroutines的一个关键特性是其成本;就初始内存占用

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

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


(我所说的“堆栈”是指线程存储执行跟踪和参数的内存,如果存在任何歧义。)

忽略堆栈大小最终受其运行的硬件约束的事实,存在动态堆栈。看看Go编程语言:它有一个“无限”堆栈


Goroutines的一个关键特性是其成本;就初始内存占用而言,它们的创建成本很低(与传统POSIX线程的1到8兆字节相反),并且它们的堆栈会根据需要增减。这使得Goroutine可以从一个4096字节的堆栈开始,该堆栈可以根据需要进行扩展和收缩,而不会出现耗尽的风险。(From)

有分段堆栈

在x86/Linux上支持分段堆栈的工作目前正在进行中