C和C 分配和釋放記憶體的區別

2021-06-09 14:58:09 字數 1114 閱讀 1990

c是malloc和free,c++是new和delete,區別如下:

(1)new、delete 是操作符,可以過載,只能在c++中使用。

(2)malloc、free是函式,可以覆蓋,c、c++中都可以使用。

(3)new 可以呼叫物件的建構函式,對應的delete呼叫相應的析構函式。

(4)malloc僅僅分配記憶體,free僅僅**記憶體,並不執行構造和析構函式

(5)new、delete返回的是某種資料型別指標,malloc、free返回的是void指標。

new的三種形態:new operator, operator new, placement new (1)new operator 上面所說的new就是new operator,共有三個步驟組成(申請記憶體,呼叫建構函式,返回記憶體指標),對於申請記憶體步驟是通過運算子new(operator new)完成的,對於呼叫什麼建構函式,可以由placement new決定。 (2)operator new 像普通運算子一樣可以被過載,operator new會去申請記憶體,申請失敗的時候會呼叫new_handler處理,這是乙個迴圈的過程,如果new_handler不丟擲異常,會一直迴圈申請記憶體,直到成功。 過載運算子new:

class test

}; operator new缺省會去申請記憶體,成功了會返回記憶體位址,失敗了會呼叫new_handler,然後再去申請記憶體,一直迴圈。所以operator new要返回,必須滿足一下條件: a. 在程式啟動的時候預留一部分記憶體,在new_handler裡釋放這部分記憶體,使得operator new能成功分配到記憶體 b.丟擲bad_alloc異常 c.直接退出程式(abort, exit) d.設定新的new_handler處理函式,set_new_handler(0)取消當前處理函式,預設丟擲bad_alloc異常 (3)placement new 用於定位建構函式,在指定的記憶體位址上用指定型別的建構函式構造物件。 例如:new(ptr) test("hello");// ptr->test::test("hello");

我們可以利用malloc+placement new來構建自己的記憶體管理模組,建立物件時,通過malloc申請乙個記憶體塊,然後呼叫placement new來完成物件的初始化;釋放物件時,首先呼叫物件的析構函式,然後通過free釋放空間.

C和C 動態記憶體分配和釋放的區別

一 先來談談在c語言下,動態記憶體分配和釋放的特點。動態分配記憶體的定義是這樣的,指在程式執行過程中,要申請記憶體,系統會根據程式的實際情況來分配,分配空間的大小是由程式的需求來決定的。在c語言下面,舉個例子,定義乙個指標,int p 此時指標i是乙個野指標,是乙個指向不確定位置的指標,對它進行操作...

C和C 動態記憶體分配和釋放的區別

一 先來談談在 c語言下,動態記憶體分配和釋放的特點。動態分配記憶體的定義是這樣的,指在程式執行過程中,要申請記憶體,系統會根據程式的實際情況來分配,分配空間的大小是由程式的需求來決定的。在 c語言下面,舉個例子,定義乙個指標,int p 此時指標 p是乙個野指標,是乙個指向不確定位置的指標,對它進...

C和C 動態記憶體分配和釋放的區別

其中一道很基礎的問題是問c和c 在動態記憶體分配,釋放方面的區別。作為乙個勵志成為c和c 軟體開發人員,居然連這個問題都解答的含糊不清,深感慚愧,這才認真總結一番。一 先來談談在c語言下,動態記憶體分配和釋放的特點。動態分配記憶體的定義是這樣的,指在程式執行過程中,要申請記憶體,系統會根據程式的實際...