2020-11-19(栈帧)
生活随笔
收集整理的這篇文章主要介紹了
2020-11-19(栈帧)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天看到幾句比較經典語句:
每個函數自己的這片區域稱為幀,由于這些幀都在棧上,所以又被稱為棧幀。棧的內存區域不一定固定,而且隨著每次調用的路徑不同,棧幀的位置也會不同。所以引入一個寄存器來專門存儲當前棧幀的位置,即ebp,稱為幀指針。
push ebp
mov ebp,esp
可以看出,ebp在初始化后實際上執行的是父棧幀地址的存儲位置,因此*ebp形成了一個鏈表,代表一層層函數的調用鏈。
編譯器也可以通過跟蹤每個計算指令執行時棧的位置,從而直接越過ebp,而使用棧指針esp來引用局部變量。這樣就能節省每次保存ebp時所需要的時間,且增加了一個通用寄存器
因此現在有兩種函數:一是有幀指針的函數,二是經過優化后沒有幀指針的函數。
總結
以上是生活随笔為你收集整理的2020-11-19(栈帧)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020-11-18(失败的一天)
- 下一篇: 2020-11-20(页帧)