malloc與new的區別

2021-08-17 11:50:54 字數 1130 閱讀 7390

【背景介紹】

【正文】

1、new是操作符,malloc為庫函式。

2、儲存位置差異:

2.1 new操作符從

自由儲存區

上為物件動態分配記憶體空間,自由儲存區分配的記憶體可以是堆上也可以是靜態儲存區域;通過delete釋放分配的空間。

2.2 malloc為庫函式,分配的內存在作業系統的堆上;必須通過free函式進行釋放。

3、返回型別差異性:

3.1 

new操作符記憶體分配成功時,返回的是物件型別的指標,型別嚴格與物件匹配,無須進行型別轉換;如果記憶體分配失敗,丟擲bac_alloc異常,它

不會返回null。所以在堆new申請的記憶體進行判斷時,不能判斷new返回的結果是否為null。

3.2 malloc函式分配成功時,返回值為void *,需要根據需要進行型別轉換;如果記憶體分配失敗,返回null。

4、是否需要指定分配記憶體大小

4.1 new會根據型別資訊進行自行計算,從而在分配記憶體時不需要指定大小

4.2 malloc函式在進行記憶體分配時,需要指定分配記憶體的大小;

5、是否需要呼叫建構函式

5.1 new/delete會呼叫物件的建構函式/析構函式以完成物件的構造/析構;

其中,new操作符分配記憶體主要分為以下三步驟:

第一步:呼叫operator new函式分配足夠的空間;

第二步:通過編譯器呼叫對應的建構函式來進行初始化;

第三步:返回指向該物件的指標。

並在使用delete操作符釋放物件時,首先呼叫物件的析構函式,再呼叫operator delete函式釋放空間。

5.2 malloc/free不會呼叫建構函式/析構函式

6、是否可以直觀分配記憶體

6.1 

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

6.2 new沒有這樣直觀的配套設施來擴充記憶體。

7、new操作符具有操作符過載等特性,而malloc不具有該特性。

new與malloc的區別

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

new與malloc的區別

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

Malloc與new 的區別

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