「堆」和「自由儲存區」

2021-08-09 21:42:07 字數 613 閱讀 8227

「c/c++中的記憶體分為幾個區?」

「通常分為5個區:堆、棧、自由儲存區、全域性/靜態儲存區、常量儲存區」。

「堆和自由儲存區有什麼不同嗎?」

...書上通常這麼說:malloc/free在堆上申請和釋放記憶體,new/delete在自由儲存區上申請和釋放記憶體。

堆(heap)c語言和作業系統的術語,堆是作業系統所維護的一塊特殊記憶體,它提供了動態分配的功能,當執行程式呼叫malloc()時就會從中分配,呼叫free()歸還記憶體。

自由儲存區(free store)是c++中通過new和delete動態分配和釋放物件的抽象概念,通過new來申請的記憶體區域可稱為自由儲存區,通過delete歸還記憶體。

基本上,所有的c++編譯器預設使用堆來實現自由儲存,運算子new和delete內部預設是使用malloc和free的方式來被實現,這時藉由new運算子分配的物件,說它在堆上也對,說它在自由儲存區上也正確。

說明:new和delete是運算子。

運算子可以過載,當new被程式設計師過載,且內部實現並非只有malloc()時,此時的記憶體空間就和堆不同了,這是一塊組合的記憶體空間,c++中稱為「自由儲存區」,這是乙個抽象的概念。

自由儲存區和堆

當我問你c 的記憶體布局時,你大概會回答 在c 中,記憶體區分為5個區,分別是堆 棧 自由儲存區 全域性 靜態儲存區 常量儲存區 如果我接著問你自由儲存區與堆有什麼區別,你或許這樣回答 malloc在堆上分配的記憶體塊,使用free釋放記憶體,而new所申請的記憶體則是在自由儲存區上,使用delet...

自由儲存區和堆

自由儲存區和堆的區別是乙個老生常談的問題了,就像面試題new和malloc的區別一樣。事實上,網上多說人認為,自由儲存區與堆的劃分標準是申請和釋放記憶體是使用的new delete還是malloc free。c 標準並沒有給出new delete應該如何實現,但很多編譯器的new delete都是以...

自由儲存區VS堆

當我問你c 的記憶體布局時,你大概會回答 在c 中,記憶體區分為5個區,分別是堆 棧 自由儲存區 全域性 靜態儲存區 常量儲存區 如果我接著問你自由儲存區與堆有什麼區別,你或許這樣回答 malloc在堆上分配的記憶體塊,使用free釋放記憶體,而new所申請的記憶體則是在自由儲存區上,使用delet...