malloc和new之間的區別

2021-08-09 17:22:50 字數 1009 閱讀 3541

1.記憶體分配失敗的返回值

malloc記憶體分配失敗返回null

new記憶體分配失敗返回bad_alloc;

2.需要分配的記憶體大小

new操作符在申請記憶體分配時,無需指定記憶體大小,編譯器會根據資訊自行計算

malloc在申請記憶體分配時,需要用sizeof()計算出其大小

3.對陣列的處理

c++提供了new與delete來專門處理陣列

new對陣列的支援體現在它會分別呼叫建構函式函式初始化每乙個陣列元素,釋放物件時為每個物件呼叫析構函式。注意delete要與new配套使用,不然會找出陣列物件部分釋放的現象,造成記憶體洩漏。

至於malloc,它就是為你開闢一片記憶體,至於你自己要幹什麼,它並不關心。所以如果要動態分配乙個陣列的記憶體,還需要我們手動自定陣列的大小:

4.對記憶體的擴充

malloc:使用malloc分配的記憶體後,如果在使用過程中發現記憶體不足,可以使用realloc函式進行記憶體重新分配實現記憶體的擴充。(realloc先判斷當前的指標所指記憶體是否有足夠的連續空間,如果有,原地擴大可分配的記憶體位址,並且返回原來的位址指標;如果空間不夠,先按照新指定的大小分配空間,將原有資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來的記憶體區域。)

new:沒有這樣的方法讓它擴充記憶體

5.是否可以被過載

malloc:不可以被過載

new:可以被過載

6.分配記憶體的位置

malloc:堆裡面獲得空間。也就是說函式返回的指標是指向堆裡面的一塊記憶體。(

棧是由編譯器自動分配釋放,存放函式的引數值、區域性變數的值等。操作方式類似於資料結構中的棧。

堆一般由程式設計師分配釋放,若不釋放,程式結束時可能由os**。注意這裡說是可能,並非一定。所以我想再強調一次,記得要釋放

)new:new操作符從

自由儲存區(free store)

上為物件動態分配記憶體空間

new和malloc的區別

1 new 是c 中的操作符,malloc是c 中的乙個函式 2 new 不止是分配記憶體,而且會呼叫類的建構函式,同理delete會呼叫類的析構函式,而malloc則只分配記憶體,不會進行初始化類成員的工作,同樣free也不會呼叫析構函式 3 記憶體洩漏對於malloc或者new都可以檢查出來的,...

malloc和new的區別

1,malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。2,對於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc f...

new 和 malloc 的區別

new 和 malloc 的區別 1.malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。2.對於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動...