C C 動態記憶體管理

2021-08-04 00:07:17 字數 1440 閱讀 7676

目錄:

總結並剖析malloc/free和new/delete之間的關係和差異。

剖析new/delete和new/delete做了什麼?

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

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

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

malloc/free只是動態分配記憶體空間/釋放記憶體空間,而new/delete除了分配空間還會呼叫建構函式與析構函式進行初始化與清理工作。malloc/free需要手動計算型別大小且返回值為void*,new/delete可以自己計算型別大小並返回對應型別的指標。

malloc分配記憶體失敗返回null指標,new分配記憶體失敗會丟擲異常。

示例:

注:operator new/operator delete為庫函式並非運算子過載,operator new/operator deletemalloc/free功能相同都是動態分配記憶體空間,並且operator new/operator delete的實現是通過呼叫malloc/free來實現的,是malloc/free的一層封裝,所不同的是,operator new/operator delete分配失敗會丟擲異常,而malloc/free分配失敗會返回null指標。

#define new_array(p,type,n)                     \

do \

\}while (false);

#define delete_array(p,type) \

do \

\free((int*)p-1); \

} while (false);

C C 動態記憶體管理

一 c語言中動態記憶體管理方式 c語言中使用 malloc calloc realloc free進行記憶體的管理和釋放 1.malloc動態記憶體申請 int ptest int malloc 10 sizeof int 申請記憶體的方式 free 釋放 2.calloc 該函式會將申請的記憶體空...

C C 動態記憶體管理

注意malloc free new delete new delete一定要匹配使用,否則可能出現記憶體洩漏甚至崩潰的問題小結 1 兩組函式都負責動態記憶體管理 2 malloc free是c c 標準庫的函式,而new delete是c 操作符。3 malloc free只負責動態分配空間 釋放空...

C C 動態記憶體管理

c語言動態記憶體管理 malloc calloc realloc free int p1 int malloc sizeof int malloc返回值型別為void int p2 int calloc 1,sizeof int 動態分配並初始化為0 int p3 int realloc p1,si...