C 動態記憶體管理

2021-09-30 14:17:20 字數 2417 閱讀 2675

c語言中使用malloc/calloc/realloc/free進行動態記憶體管理,malloc/calloc/realloc用來在堆上開闢空間,free將申請的空間釋放掉。

void test()

// calloc 該函式會將申請的記憶體空間初始化為0

int * p2= ( int*) calloc(5, sizeof( int));

if ( p2 != null)

// relloc,改變原有記憶體空間大小,若不能改變,則將會開闢一段新的記憶體,將原有記憶體的內容拷貝過去,但不會對新開闢的空間進行初始化

int * p3 = ( int*) malloc(10 * sizeof( int));

realloc( p3, 100*sizeof( int));

c++中動態記憶體管理

c++中通過new和delete運算子進行動態記憶體管理。

void test ()

特別注意:new和delete、new和delete一定匹配使用

class a

~a()

private:

int* _a;

};void test()

int main()

當我們只為p1用malloc/free動態分配記憶體空間/釋放空間時我們執行程式,會發現什麼也沒有輸出:

而我們為p2用new/delete動態分配記憶體空間/釋放空間時會發現它呼叫建構函式和析構函式:

【malloc/free和new/delete的區別和聯絡】

1. 它們都是動態管理記憶體的入口。

2. malloc/free是c/c++標準庫的函式,new/delete是c++操作符。

3. malloc/free只是動態分配記憶體空間/釋放空間。而new/delete除了分配空間還會呼叫建構函式和析構函式進行初始化與清理(清理成員)。

4. malloc/free需要手動計算型別大小且返回值會void*,new/delete可自己計算型別的大小,返回對應型別的指標。

剖析new/delete、new/delete到底做了些什麼事情

new:

呼叫operator new分配空間。

呼叫建構函式初始化物件。

呼叫析構函式清理物件

呼叫operator delete釋放空間

new呼叫operator new分配空間。

呼叫n次建構函式分別初始化每個物件。

呼叫n次析構函式清理物件。

呼叫operator delete釋放空間。

實現new_array/delete_array巨集,模擬new/delete申請和釋放陣列。

1.模擬實現new:

#define new_array(ptr, type, n)                 \

do \

while(false);

2.模擬實現delete:

#define delete_array(ptr, type)         \

do \

while (false);

C 動態記憶體管理

我們都知道在c 中可以用new malloc動態分配記憶體空間,delete free釋放動態開闢的記憶體空間。1.那麼既然c 中有了可以動態開闢記憶體的函式為什麼又要有new delete呢?c 中的malloc free是繼承c語言中的malloc free,它的用法和在c語言中的用法一模一樣。...

C 動態記憶體管理

1 總結並剖析malloc free和new delete之間關係和差異。1 他們都是動態記憶體管理的入口 2 malloc要計算空間大小,返回值要強轉 new自動計算位元組大小,返回值是相應型別的指標 3 malloc只開闢空間 new開闢空間 呼叫建構函式初始化 delete呼叫析構函式清理 釋...

c 動態記憶體管理

c語言動態記憶體管理 c中關於動態記憶體的標準庫函式 malloc calloc realloc free 以下是關於這幾個函式的介紹 1 malloc 用於動態開闢記憶體 堆空間 返回型別為void 引數 size t size 是無符號整型表示要開闢的空間大小,單位是位元組,2 calloc 用...