堆(heap):堆是一種經過排序的樹形數據結構,每個結點都有一個值。
棧(stack):它是一種具有后進先出性質的數據結構,也就是說后存放的先取,先存放的后取。(PS:頗有砌牆的磚——后來者居上的趕腳。)
1,申請方式
heap:程序員自己申請,並指明大小。
stack:由系統分配。
2,申請效率
原為:
heap:效率較高,速度較快,但程序員無法對其進行控制。
stack:由new分配的內存,相對效率和速度都較低,且容易產生碎片,但由於是程序員自己申請操作,靈活性強,使用方便。
3,存儲的數據類型
stack:存儲值類型,即存儲固定長度的數據。比如:整數、字符、結構、布爾、枚舉等。每個程序在執行時都有自己的堆棧,其他程序不能訪問該堆棧。
heap:存儲引用類型
三、相關名詞
1,壓棧(進棧、入棧):用push表示,就是把數據放入棧中,從棧頂放入,有先進后出的特點!
2,清棧:清空棧中所有的數據。
3,出棧:用POP表示,它是和壓棧相反的概念,即把數據從棧中取出來。出棧時從棧頂取出。
形象化解釋:有二層樓,拿着磚頭,繼續往上蓋樓,就是壓棧。取下磚頭拆樓,硬生生把樓房給弄成平房,就是出棧。然后,要是看這座樓不順眼,直接給炸了,灰都不剩那種,就叫清棧。
注意問題:壓棧:需要考慮是否滿棧,比如一座樓根據地基的承受能力,目前高度達到了極限,那么,就不能往上繼續蓋。
清棧:需要考慮棧是否為空,空棧,不需要清棧。
出棧:每次出棧都只能出頂棧。(PS:我在想出棧是不是得留下點東西,要是什么都不留,豈不成了清棧了)
4,堆棧溢出:就是不顧堆棧中分配的局部數據塊大小,向該數據塊寫入了過多的數據,導致數據越界,結果覆蓋了舊的堆棧數據。 (PS:有點像數組的下標越界問題)
。比如:類、接口、數組等。