堆 棧和堆疊的區別

2021-10-01 20:26:34 字數 1126 閱讀 2210

堆(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定義時,堆應該就是未 保留 未 提交...