複製鏈接
請複製以下鏈接發送給好友

棧幀

鎖定
C語言中,每個棧幀對應着一個未運行完的函數。棧幀中保存了該函數的返回地址和局部變量。
中文名
棧幀
外文名
Stack Frame
別    名
棧幀也叫過程活動記錄
C語言
棧幀就是一個函數執行的環境:
注    意
而不是系統棧的底部。

目錄

棧幀概論

棧幀也叫過程活動記錄,是編譯器用來實現過程/函數調用的一種數據結構。

棧幀C語言

從邏輯上講,棧幀就是一個函數執行的環境:函數參數、函數的局部變量、函數執行完後返回到哪裏等等。
實現上有硬件方式和軟件方式(有些體系不支持硬件棧)
首先應該明白,棧是從高地址向低地址延伸的。每個函數的每次調用,都有它自己獨立的一個棧幀,這個棧幀中維持着所需要的各種信息。寄存器ebp指向當前的棧幀的底部(高地址),寄存器esp指向當前的棧幀的頂部(低地址)。
注意:EBP指向當前位於系統棧最上邊一個棧幀的底部,而不是系統棧的底部。嚴格説來,“棧幀底部”和“棧底”是不同的概念;ESP所指的棧幀頂部和系統棧的頂部是同一個位置。