庫函式之malloc與new

2021-10-13 02:26:57 字數 649 閱讀 8818

從本質上來說,malloc(linux上具體實現可以參考man malloc,glibc通過brk()&mmap()實現)是libc裡面實現的乙個函式,如果在source code中沒有直接或者間接include過stdlib.h,那麼gcc就會報出error:『malloc』 was not declared in this scope。如果生成了目標檔案(假定動態鏈結malloc),如果執行平台上沒有libc(linux平台,手動指定ld_library_path到乙個空目錄即可),或者libc中沒有malloc函式,那麼會在執行時(run-time)出錯。new則不然,是c++的關鍵字,它本身不是函式。new不依賴於標頭檔案,c++編譯器就可以把new編譯成目標**(g++4.6.3會向目標中插入_znwm這個函式,另外,編譯器還會根據引數的型別,插入相應的建構函式)。

在使用上,malloc 和 new 至少有兩個不同: new 返回指定型別的指標,並且可以自動計算所需要大小。而 malloc 則必須要由我們計算位元組數,並且在返回後強行轉換為實際型別的指標。另外有一點不能直接看出的區別是,malloc 只管分配記憶體,並不能對所得的記憶體進行初始化,所以得到的一片新記憶體中,其值將是隨機的。除了分配及最後釋放的方法不一樣以外,通過malloc或new得到指標,在其它操作上保持一致。

malloc與free對應,new與delete對應。

malloc函式 new和malloc的區別

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

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...