棧溢出(Stack Overflow)


調用棧(Call Stack)描述的時函數之間的調用關系。它由多個棧幀(Stack Frame)組成,每個棧幀對應着一個未運行完的函數。棧幀中保存了該函數的返回地址和局部變量,因而不能再執行完畢后找到正確的返回地址,還很自地保證了不同函數間的局部變量互不相干——不同的函數對應着不同的棧幀。

 

在可執行文件中,正文段(Text Segment)用於儲存指令,數據段(Data Segment)用於儲存已初始化的全局變量,BSS段(BSS Segment)用於存儲未賦值的全局變量所需的空間。

 

調用棧並不儲存在可執行文件中,而是在運行時創建,調用棧所在的段稱為堆棧段(Stack Segment)。和其他段一樣,堆棧段也有自己的大小,不能被越界訪問,否則就會出現段錯誤(Segmentation Fault)。

 

棧溢出(Stack Overflow):每次遞歸調用都需要往調用棧里增加一個棧幀,久而久之就越界了。這種情況叫做棧溢出。

在運行時,程序會動態創建一個堆棧段,里面存放着調用棧,因此保存着函數的調用關系和局部變量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM