對於初學程式設計的人員來說,變數在記憶體中是分配在堆中還是在棧中,往往不甚明白,今天我來清晰簡單的講解下。
當我們看到乙個變數型別是已知的,就分配在棧裡面,比如int,double等。其他未知的型別,比如自定義的型別,因為系統不知道需要多大,所以程式自己申請,這樣就分配在堆裡面。
值型別與引用型別的分配,如圖:
簡單來說,值型別是分配在棧裡面,引用型別分配在堆裡面。
那從記憶體的分配角度來看,是因為值型別,已經知道了型別的範圍大小,可以進行有效分配,比如int,計算機是知道其範圍的,所以直接由系統分配在棧中,無需自己申請!
而新的型別,比如自己定義乙個類,很明顯這個類是不知道大小的,應該有程式自己來申請記憶體空間,所以由堆來分配!
記憶體分配堆與棧的區別
堆 heap 與棧 stack 是開發人員必須面對的兩個概念,在理解這兩個概念時,需要放到具體的場景下,因為不同場景下,堆與棧代表不同的含義。一般情況下,有兩層含義 1 程式記憶體布局場景下,堆與棧表示兩種記憶體管理方式 2 資料結構場景下,堆與棧表示兩種常用的資料結構。1.程式記憶體分割槽中的堆與...
記憶體的堆分配和棧分配
記憶體的堆分配和棧分配 備註 這一部分非常重要,如果錯誤請及時告知。謝謝 這裡是完全參考其他部落格。c 記憶體模型 1 棧區 由編譯器自動分配和釋放,存放函式的引數數值,區域性變數的值 其操作方式類似於資料結構中的棧 2 堆區 一般由使用者分配和釋放,若使用者不釋放,程式結束時候由os 它與資料結構...
記憶體的堆分配和棧分配
c 記憶體模型 1 棧區 由編譯器自動分配和釋放,存放函式的引數數值,區域性變數的值 其操作方式類似於資料結構中得棧 2 堆區 一般由使用者分配和釋放,若使用者不釋放,程式結束時候由os 它與資料結構中堆是兩回事,分配方式類似鍊錶 3 全域性區 靜態區 static 全域性變數和靜態變數的存放區域。...