堆、棧和堆棧的區別


堆(heap):堆是一種經過排序的樹形數據結構,每個結點都有一個值。

棧(stack):它是一種具有后進先出性質的數據結構,也就是說后存放的先取,先存放的后取。(PS:頗有砌牆的磚——后來者居上的趕腳。)

1,申請方式

heap:程序員自己申請,並指明大小。

stack:由系統分配。

2,申請效率

原為:

heap:效率較高,速度較快,但程序員無法對其進行控制。

stack:由new分配的內存,相對效率和速度都較低,且容易產生碎片,但由於是程序員自己申請操作,靈活性強,使用方便。

3,存儲的數據類型

stack:存儲值類型,即存儲固定長度的數據。比如:整數、字符、結構、布爾、枚舉等。每個程序在執行時都有自己的堆棧,其他程序不能訪問該堆棧。

heap:存儲引用類型

三、相關名詞

1,壓棧(進棧、入棧):用push表示,就是把數據放入棧中,從棧頂放入,有先進后出的特點!

2,清棧:清空棧中所有的數據。

3,出棧:用POP表示,它是和壓棧相反的概念,即把數據從棧中取出來。出棧時從棧頂取出。

 

形象化解釋:有二層樓,拿着磚頭,繼續往上蓋樓,就是壓棧。取下磚頭拆樓,硬生生把樓房給弄成平房,就是出棧。然后,要是看這座樓不順眼,直接給炸了,灰都不剩那種,就叫清棧。

 

注意問題:壓棧:需要考慮是否滿棧,比如一座樓根據地基的承受能力,目前高度達到了極限,那么,就不能往上繼續蓋。

          清棧:需要考慮棧是否為空,空棧,不需要清棧。

          出棧:每次出棧都只能出頂棧。(PS:我在想出棧是不是得留下點東西,要是什么都不留,豈不成了清棧了)

 

4,堆棧溢出:就是不顧堆棧中分配的局部數據塊大小,向該數據塊寫入了過多的數據,導致數據越界,結果覆蓋了舊的堆棧數據。 (PS:有點像數組的下標越界問題)

。比如:類、接口、數組等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM