C 面試知識 new和malloc的區別

2021-09-13 15:30:27 字數 467 閱讀 2161

阿里面試官問的乙個問題,沒答出來。

new申請記憶體的位置處於自由儲存區,為動態物件分配空間;malloc分配空間處於堆

new/delete屬於c++中的乙個關鍵字或操作符,需要編譯器支援,malloc/free屬於c的乙個庫函式,需要標頭檔案支援

new不用指定要分配的記憶體大小,由編譯器自動計算,malloc需要顯式的指出記憶體大小

new分配記憶體成功後返回的是物件型別指標,因此不用進行強制型別轉換,是符合型別安全性的操作符,malloc返回的是void*型別,需要進行強制型別轉換成需要的型別。

new分配失敗會丟擲bac_alloc異常,malloc返回null

new經歷三個過程:呼叫operator new函式申請足夠記憶體,執行建構函式構造物件,返回物件型別指標

(delete:呼叫析構函式,編譯器呼叫operator delete()釋放記憶體)

malloc沒有呼叫建構函式和析構函式的過程。

malloc函式 new和malloc的區別

1 申請的記憶體所在位置 new操作符從自由儲存區上為物件動態分配記憶體空間,而malloc函式從堆上動態分配記憶體。自由儲存區是c 基於new操作符的乙個抽象概念,凡是通過new操作符進行記憶體申請,該記憶體即為自由儲存區。而堆是作業系統中的術語,是作業系統所維護的一塊特殊記憶體,用於程式的記憶體...

C 中new和malloc的區別

1 new是c 中的操作符,malloc是c中的乙個函式.new是個操作符,和什麼 有一樣的地位,malloc是個分配記憶體的函式,供你呼叫的.正因為如此,new是保留字,不需要標頭檔案支援,malloc需要標頭檔案庫函式支援.2 new不止是分配記憶體,而且會呼叫類的建構函式,同理delete會呼...

細談C 中的new和malloc

摘自 new和malloc的區別 1 new 是c 中的操作符,malloc是c 中的乙個函式 2 new 不止是分配記憶體,而且會呼叫類的建構函式,同理delete會呼叫類的析構函式,而malloc則只分配記憶體,不會進行初始化類成員的工作,同樣free也不會呼叫析構函式 3 記憶體洩漏對於mal...