堆(heap):堆是一種經過排序的樹形資料結構,每個結點都有乙個值。
棧(stack):它是一種具有後進先出性質的資料結構,也就是說後存放的先取,先存放的後取。(ps:頗有砌牆的磚——後來者居上的趕腳。)
1,申請方式
heap:程式設計師自己申請,並指明大小。
stack:由系統分配。
2,申請效率
原為:
heap:效率較高,速度較快,但程式設計師無法對其進行控制。
stack:由new分配的記憶體,相對效率和速度都較低,且容易產生碎片,但由於是程式設計師自己申請操作,靈活性強,使用方便。
3,儲存的資料型別
stack:儲存值型別,即儲存固定長度的資料。比如:整數、字元、結構、布林、列舉等。每個程式在執行時都有自己的堆疊,其他程式不能訪問該堆疊。
heap:儲存引用型別
三、相關名詞
1,壓棧(進棧、入棧):用push表示,就是把資料放入棧中,從棧頂放入,有先進後出的特點!
2,清棧:清空棧中所有的資料。
3,出棧:用pop表示,它是和壓棧相反的概念,即把資料從棧中取出來。出棧時從棧頂取出。
形象化解釋:有二層樓,拿著磚頭,繼續往上蓋樓,就是壓棧。取下磚頭拆樓,硬生生把樓房給弄成平房,就是出棧。然後,要是看這座樓不順眼,直接給炸了,灰都不剩那種,就叫清棧。
注意問題:壓棧:需要考慮是否滿棧,比如一座樓根據地基的承受能力,目前高度達到了極限,那麼,就不能往上繼續蓋。
清棧:需要考慮棧是否為空,空棧,不需要清棧。
出棧:每次出棧都只能出頂棧。(ps:我在想出棧是不是得留下點東西,要是什麼都不留,豈不成了清棧了)
4,堆疊溢位:就是不顧堆疊中分配的區域性資料塊大小,向該資料塊寫入了過多的資料,導致資料越界,結果覆蓋了舊的堆疊資料。 (ps:有點像陣列的下標越界問題)
。比如:類、介面、陣列等。
堆,棧,堆疊的區別
乙個程式一般分為3段 text段,data段,bss段 text段 就是放程式 的,編譯時確定,唯讀,data段 存放在編譯階段 而非執行時 就能確定的資料,可讀可寫 就是通常所說的靜態儲存區,賦了初值的全域性變數和靜態變數存放在這個區域,常量也存放在這個區域 bss段 定義而沒有賦初值的全域性變數...
佇列 堆 棧 堆疊的區別?
佇列是先進先出 就像一條路,有乙個入口和乙個出口,先進去的就可以先出去。而棧就像乙個箱子,後放的在上邊,所以後進先出。程序中每個執行緒都有自己的堆疊,這是一段執行緒建立時保留下的位址區域。我們的 棧記憶體 即在此。至於 堆 記憶體,我個人認為在未用new定義時,堆應該就是未 保留 未 提交 的自由空...
佇列 堆 棧 堆疊的區別
堆疊 先進後出 就像放在箱子的衣服,先放進去的後拿出來 佇列 先進先出 就像一條路,有乙個入口和乙個出口,先進去的就可以先出去 程序中每個執行緒都有自己的堆疊,這是一段執行緒建立時保留下的位址區域。我們的 棧記憶體 即在此。至於 堆 記憶體,我個人認為在未用new定義時,堆應該就是未 保留 未 提交...