C++--問題18--堆和棧的區別
阿新 • • 發佈:2020-10-12
C++--問題18--堆和棧的區別
1、堆、棧空間分配區別
棧(作業系統):由作業系統(編譯器)自動分配釋放,存放函式的引數值,區域性變數的值等。
堆(作業系統):從定義上,堆是由new和malloc開闢的一塊記憶體,一般由程式設計師手動管理,分配釋放,若程式設計師不釋放,程式結束時可能由OS回收,分配方式倒是類似於連結串列。
堆空間因為會有頻繁的分配釋放操作,會產生記憶體碎片。
堆的生長空間向上,地址越來越大,棧的生長空間向下,地址越來越小。
2、堆疊快取方式區別
棧使用的是一級快取,它們通常都是被呼叫時處於儲存空間中,呼叫完畢立即釋放。
堆則是存放在二級快取中,生命週期由虛擬機器的垃圾回收演算法來決定(並不是一旦成為孤兒物件就能被回收)。所以呼叫這些物件的速度要相對來得低一些。
3、堆疊資料結構區別
堆:堆可以被看成是一棵樹,如:堆排序。
棧:一種先進後出的資料結構。