堆疊段(stack segment)通常是指採用堆疊方式工作的一段內存區域。當程序被執行時,程序可能會將其執行的狀態加入棧的頂部;當程序結束時,它必須把棧頂的狀態數據彈出(pop)。
在採用段式內存管理方式進行程序內存分配的架構中,堆疊段用來存放局部變量和函數返回地址。堆疊段是在程序運行時動態分配使用,只需要通過棧頂指針即可訪問。目前大多數CPU中都有專用寄存器可以被用來存放棧頂地址。
理論上,最小的棧可能是一個僅能保存函數調用(function call)地址的結構,以致被調用的函數能根據該地址返回(return)到原函數裏。除此功能以外,開發者也可以將棧另作他用。
基於棧的內存分配法的另一特點就是,當程序結束時,棧所用的內存能夠自動快速地被回收,開發者不用干預,省心省力。如果棧頂的數據需要以某種格式被保存起來,那麼在程序結束前,此數據必須被複製到其他位置,不然就會被彈出棧而丟失。因此,基於棧的內存分配法適用於那些只需暫時數據的保存情況。
作業系統給線程分配的棧可能僅為幾個KB的大小。如果分配的棧內存過大,超過了線程實際需要,這可能導致棧溢出(stack overflow),以致系統崩潰。
x86處理器系列對線程棧的管理有特殊的指令。其他處理器系列(包括PowerPC和MIP)則沒有這種支持。
參見
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.