堆疊記憶體大小限制:技術注意事項
堆疊是計算中的基本資料結構,與堆疊。雖然堆疊提供了看似無限的記憶體分配,但堆疊的大小通常限制在 1 MB 左右。這就提出了一個問題:哪些技術因素導致了這種差異?
根據一個假設,堆疊的大小受限源自於其與堆相比的固有管理複雜性。堆疊的操作需要連續的記憶體位置。與堆不同,它不能根據需要隨機分配內存,而是必須為此目的保留虛擬地址。保留的虛擬位址空間越大,可以建立的執行緒就越少。
例如,在具有 2GB 虛擬位址空間的 32 位元應用程式中,2MB 堆疊大小(如 pthreads 中)限制了最大數量執行緒數最多為 1024。對於需要大量執行緒的 Web 伺服器等應用程式來說,此限制可能會成為問題。將堆疊大小增加到 100MB,同時不立即分配全部數量,會進一步將執行緒限制減少到 20 左右。這樣的限制甚至會阻礙簡單的 GUI 應用程式。
奇怪的是,同樣的限制在 64 位元上仍然存在平台,有充足的虛擬位址空間。為了解釋這一點,一些人推測已建立的「堆疊最佳實踐」導致了 64 位元系統上缺乏對大型堆疊的支援。開發人員習慣在堆上分配大對象,並在必要時手動增加堆疊大小。因此,64 位元架構上並未出現對「巨大」堆疊支援的感知需求。
以上是為什麼棧的大小有限,而堆的大小似乎無限?的詳細內容。更多資訊請關注PHP中文網其他相關文章!