1、記憶體中的堆疊使用是先從 高位的位址 到 低位的位址 使用、儲存的。
2、堆疊使用的時候,最後需要進行堆疊平衡,也就是去平衡esp中暫存器儲存的值
3、esp暫存器中儲存的值對應的就是當前堆疊使用的位置
4、如果當前的壓入的堆疊資料(不是通過push指令)後面不需要的話,一般就是在sub esp,x
堆疊的位置之後又繼續add esp,x
這樣位置又恢復到原來的位置,之前壓入的資料會被下次替換掉
5、push/pop = mov 位址 再 sub / add,它會壓入資料並且修正當前堆疊位置
堆疊平衡:
1、在返回父程式之前,在ret
之前需要保持堆疊平衡
2、維持堆疊平衡的手段分為兩種:
外平衡:是在子程式中ret
返回到call的後一條語句的時候再對esp暫存器繼續進行堆疊平衡的操作
函式堆疊平衡
int func int a,int b,int c,int d 01243d10 popedi 01243d11 popesi 01243d12 popebx 01243d13 movesp,ebp 01243d15 popebp 01243d16 retint main 01241b83 pop...
記憶體中堆疊的理解
堆疊 在計算機領域,堆疊是乙個不容忽視的概念,但是很多人甚至是計算機專業的人也沒有明確堆疊其實是兩種資料結構。要點 堆 順序隨意 棧 先進後出 堆和棧的區別 一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引...
JS中的堆疊記憶體
棧記憶體俗稱作用域 全域性作用域 只有乙個,即window 和私有作用域。作用 為js 提供執行的環境 執行js 的地方 基本資料型別是直接存放在棧記憶體中的。堆記憶體用於儲存引用資料型別值的 相當於儲存的倉庫 物件儲存的是鍵值對。函式儲存的是 字串。堆記憶體利用空物件指標null來釋放空間。var...