棧幀——函數的調用過程

> 什麼是棧幀

> 棧幀詳解

一、什麼是棧幀
定義: 棧幀也叫過程活動記錄,是編譯器用來實現過程/函數調用的一種數據結構。
每一次函數調用都是一個過程,這個過程要爲函數開闢空間、分配地址,用於本次函數的調用中臨時變量的保存和傳遞。這塊空間我們就稱爲函數棧幀。

二、棧幀詳解

以一個簡單代碼爲例:
這裏寫圖片描述

轉到反彙編:

這裏寫圖片描述

1.main函數的棧幀分配前:
這裏寫圖片描述

__tmainCRTStartup是調用main函數之前需要調用的
edp存放了指向函數棧幀棧底的地址
esp存放了指向函數棧幀棧頂的地址

2.main函數的棧幀分配
這裏寫圖片描述

3.Add函數的調用過程
彙編代碼:
這裏寫圖片描述

棧幀創建過程:
這裏寫圖片描述

4.函數結束過程:
這裏寫圖片描述

出棧時會銷燬所創建的臨時空間。

發佈了35 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章