2016-11-16 116 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