堆棧段

堆棧段 （ stack segment ） 通常是指採用堆棧方式工作的一段內存區域 。 當程序被執行時 ， 程序可能會將其執行的狀態加入棧的頂部 ； 當程序結束時 ， 它必須把棧頂的狀態數據彈出 （ pop ） 。 在採用段式內存管理方式進行程序內存分配的架構中 ， 堆棧段用來存放局部變量和函數返回地址 。 堆棧段是在程序運行時動態分配使用 ， 只需要通過棧頂指針即可訪問 。 目前大多數CPU中都有專用寄存器可以被用來存放棧頂地址 。 理論上 ， 最小的棧可能是一個僅能保存函數調用 （ function call ） 地址的結構 ， 以致被調用的函數能根據該地址返回 （ return ） 到原函數里 。 除此功能以外 ， 開發者也可以將棧另作他用 。 基於棧的內存分配法的另一特點就是 ， 當程序結束時 ， 棧所用的內存能夠自動快速地被回收 ， 開發者不用幹預 ， 省心省力 。 如果棧頂的數據需要以某種格式被保存起來 ， 那麼在程序結束前 ， 此數據必須被複制到其他位置 ， 不然就會被彈出棧而丟失 。 因此 ， 基於棧的內存分配法適用於那些只需暫時數據的保存情況 。 操作系統給線程分配的棧可能僅爲幾個KB的大小 。 如果分配的棧內存過大 ， 超過了線程實際需要 ， 這可能導致棧溢出 （ stack overflow ） ， 以致系統崩潰 。 x86處理器系列對線程棧的管理有特殊的指令 。 其他處理器系列 （ 包括PowerPC和MIP ） 則沒有這種支持 。