自由儲存區和堆

2021-09-26 04:18:17 字數 610 閱讀 4162

自由儲存區和堆的區別是乙個老生常談的問題了,就像面試題new和malloc的區別一樣。事實上,網上多說人認為,自由儲存區與堆的劃分標準是申請和釋放記憶體是使用的new/delete還是malloc/free。c++標準並沒有給出new/delete應該如何實現,但很多編譯器的new/delete都是以malloc/free為基礎來實現的。從技術上來說,堆(heap)是c語言和作業系統的術語,堆是作業系統所維護的一塊特殊記憶體,它提供了動態分配的功能,使用malloc()、free()來申請/釋放記憶體。而自由儲存是c++中通過new和delete動態分配和釋放物件的抽象概念。基本上,所有的c++編譯器預設使用堆來實現自由儲存。也就是說,預設的全域性運算子new和delete也許會使用malloc和free的方式申請和釋放儲存空間,也就是說自由儲存區就位於堆上。但程式設計師也可以通過過載操作符,改用其他記憶體來實現自由儲存,例如全域性變數做的物件池,這時自由儲存區就不位於堆上了。

因此,我認為自由儲存區和堆的區別是:堆是作業系統維護的一塊記憶體,是乙個物理概念,而自由儲存是c++中通過new與delete動態分配和釋放的物件的儲存區,是乙個邏輯概念。

ps:c++的記憶體布局:記憶體區分為5個區,分別是堆、棧、自由儲存區、全域性/靜態儲存區、常量儲存區

自由儲存區和堆

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

「堆」和「自由儲存區」

c c 中的記憶體分為幾個區?通常分為5個區 堆 棧 自由儲存區 全域性 靜態儲存區 常量儲存區 堆和自由儲存區有什麼不同嗎?書上通常這麼說 malloc free在堆上申請和釋放記憶體,new delete在自由儲存區上申請和釋放記憶體。堆 heap c語言和作業系統的術語,堆是作業系統所維護的一...

自由儲存區VS堆

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