分割堆疊:AMD64 架構上有必要還是不必要?
拆分堆疊在 64 位元架構(特別是 AMD64)上是不必要的,已在討論中浮現,但沒有明確聲明。然而,Ian Lance Taylor 和 bstrie 等專家已經提到過。
隱含論點是什麼?
隱含論點是龐大的 64 位元虛擬AMD64 系統上的位址空間消除了分割堆疊的需要。 Taylor 建議多執行緒程式可以在顯著減少記憶體使用的情況下運行,因為每個執行緒不再需要保留大量的堆疊空間。
Bstrie 承認分割堆疊的開銷及其有限的用例32 位元環境使其對現代系統的吸引力降低。
為什麼要拆分堆疊沒有必要嗎?
分割堆疊是為了解決 32 位元系統中可用的有限位址空間而開發的。在這樣的系統中,每個執行緒都需要自己的堆疊,並且所有執行緒的總堆疊大小可能會快速消耗可用記憶體。
但是,在 AMD64 架構中,64 位元位址空間非常大,允許數百萬個獨立的堆疊位址範圍,每個位址範圍的大小與整個 32 位元位址空間相當。這種充足的位址空間消除了有效管理多個執行緒的分割堆疊的需要。
實作細節
在 AMD64 系統上,採用平面記憶體模型,具有虛擬記憶體由硬體記憶體管理單元(MMU)處理的轉換。為每個堆疊保留較大的虛擬位址空間區塊,最初僅將第一頁 (4 kB) 對應到實體 RAM,效率要高得多。
這種方法允許堆疊使用連續的虛擬位址根據需要擴展和收縮位址。當堆疊增長或收縮時,作業系統動態配置 MMU 將頁面對應到實際 RAM,從而確保高效的記憶體使用。
以上是AMD64 上的拆分堆疊:已成為過去還是仍然有必要?的詳細內容。更多資訊請關注PHP中文網其他相關文章!