malloc和new之間的區別

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)上爲對象動態分配內存空間


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章