1.c語言動態記憶體管理
c語言使用malloc/calloc/realloc/free進行動態記憶體管理。
malloc:開闢一塊空間,呼叫方法為malloc(x),x為開闢的位元組數。(malloc 開闢的空間需要進行強制型別轉換後賦給指標,malloc開闢的空間不進行初始化)
calloc:同樣是開闢一塊空間,與malloc不同的是,calloc會將空間初始化為0,呼叫方法為calloc(x,size),x為型別個數,size為型別所佔的位元組數。
realloc:對開闢的的空間進行增容或減容。使用方法realloc(ptr,size),ptr為這塊空間的位址,size為想要為這塊空間重新分配的位址。
free:將開闢的空間釋放。
注意:malloc,calloc和realloc在開闢空間失敗時會返回null,因此不能直接將開闢的空間賦值給指標,應先判斷空間是否開闢成功。
2.c++動態記憶體管理
c++通過new和delete動態管理記憶體:new/delete動態管理物件, new/delete動態管理物件陣列。
int main ()
注意:malloc/free、new/delete、new/delete 一定匹配使用!否則可能出 現記憶體洩露甚⾄崩潰的問題 。
3.c++的其他記憶體管理介面
void * operator new (size_t size);
void operator delete (void* p);
void * operator new (size_t size);
void operator delete (void* p);
(1). operator new/operator delete operator new/operator delete 和 malloc/free用法一樣。
(2). 他們只負責分配空間/釋放空間,不會呼叫物件建構函式/析構函式來初始化/清理對 象。
(3). 實際operator new和operator delete只是malloc和free的一層封裝。
new:
(1). 呼叫operator new分配空間。
(2). 呼叫建構函式初始化物件。
delete:
(1). 呼叫析構函式清理物件。
(2). 呼叫operator delete釋放空間。
new[n]
(1). 呼叫operator new分配空間。
(2). 呼叫n次建構函式分別初始化每個物件。
delete :
(1). 呼叫n次析構函式清理物件。
(2). 呼叫operator delete釋放空間。
4.定位new表示式
定位new表示式(replacement版本)
定位new表示式是在已分配的原始記憶體空間中呼叫建構函式初始化乙個物件。
new (place_address)
type
new (place_address)
type(initializer-list)
place_address必須是乙個指標,initializer-list是型別的初始化列表。
5.malloc/free和new/delete的區別和聯絡
(1). 它們都是動態管理記憶體的入口。
(2). malloc/free是c/c++標準庫的函式,new/delete是c++操作符。
(3). malloc/free只是動態分配記憶體空間/釋放空間。new/delete除了分配空間還會呼叫建構函式和析構函式進行初始化與清理(清理成員)。
(4). malloc/free需要手動計算型別大小且返回值會void*,new/delete可自動計算型別的大小,返回對應型別的指標。
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 用...