1. 程式人生 > >作業系統課程中記憶體裡面堆和棧的區別

作業系統課程中記憶體裡面堆和棧的區別

http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html首先需要宣告,這個連結裡面有比較詳細的描述,但是有點長,下面我簡單的描述一下,讓大家快速的瞭解這個知識。

 我們在組合語言中或是在作業系統課堂上經常說的堆疊,實際上叫作棧。而堆是程式執行過程中另外一塊記憶體空間。下圖就是一個程序跑起來以後在記憶體中需要的空間(包括資料段、程式碼段、堆疊段等等,但不是全部)。


棧是幹什麼的呢?它由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。函式之間相互呼叫需要傳遞引數,就是將引數放到棧裡通過壓棧和出棧的操作來完成。棧頂可以用esp暫存器來指向。 

堆是幹什麼的呢?它一般由程式設計師分配釋放,是程式設計師開闢的一塊空間,比如用“p1= (char *)malloc(10)”語句就可以開闢10個char型空間。這個空間的作用就看程式設計師怎麼用了。

各位看官可以關注我的微信公眾號:laoyangkuaipao

那裡有很多作業系統學習、嵌入式開發、最新科技諮詢相關的文章。