在 x86_64 上不需要分割堆疊?
運行時模型中拆分堆疊的主題引發了關於它們在 64 位元架構上的必要性的問題,例如x86_64。有些意見認為,由於可用的位址空間擴大,不再需要拆分堆疊。
問題1的回答:意見的解釋
是的,引用的意見這個問題意味著在 x86_64 架構上不需要分割堆疊。 32 位元系統上提到的「數百萬執行緒」和「狹窄用例」顯示 64 位元系統的大位址空間可以容納足夠數量的堆疊範圍。
答案問題 2:不必要的理由
由於虛擬位址空間明顯更大,64 位元架構上不再需要分割堆疊。這允許每個堆疊擁有一個專用且相當大的位址範圍,可與整個 32 位元位址空間相媲美。
在現代平面記憶體模型中,硬體記憶體管理單元 (MMU) 將虛擬位址轉換為實體位址記憶位置。在 x86_64 上,為每個堆疊分配大塊虛擬位址空間並僅將初始頁面映射到實際 RAM 被發現效率更高。
這種方法允許堆疊使用連續的虛擬位址根據需要增長和縮小位址。當堆疊增大或縮小超過指定閾值時,作業系統可以重新配置 MMU,以將虛擬記憶體的附加頁面對應到實際記憶體。
透過仔細選擇這些閾值,堆疊可以像具有 O(1 ) 平均堆疊操作複雜度。它們保留了支援數百萬個堆疊的優勢,這些堆疊可以增長到任意大小,同時僅消耗它們使用的記憶體。
以上是x86_64 架構上是否需要拆分堆疊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!