malloc(位元組) ————申請
calloc(數量,每個位元組大小)————申請並初始化為0
realloc ()擴充套件或者壓縮
realloc 擴充套件可能導致位置改變,所以要重新接收,壓縮會截尾
free()釋放,
malloc介面 申請 free釋放
int arrary= (int*) malloc(nsizeof( int));malloc 的返回值 為 void;開闢
失敗,返回null;
free(null 或者malloc 的返回指標)
free的操作注意點 : 不能部分釋放 ;申請多少,釋放多少,編譯可以通過,但執行一點出錯;free(null)永真;
2calloc介面, 申請時並初始化0;calloc(元素數量,每個元素的位元組數)
realloc :
對已申請的記憶體做修改:擴充套件和縮小
擴充套件:原先內容仍舊保留,
縮小:去尾;
int* array1= realloc(array被運算元組,調整後的大小);
注意 :realloc 函式的位址可能會變:
因為:記憶體(堆)不夠大時,編譯器就會去尋找 合適 的記憶體大小的地方 去開闢;所以位址可能 會改變;
若是改變,原來的指標(申請的記憶體塊)將被realloc介面釋放掉;被釋放的空間不能重複釋放;
在這裡 我們發現 棧是向下生長的(棧頂是高位址);堆是向上生長的
注意 :動態分配記憶體是在堆上進行的
操作符
new 建立(申請)
delete 釋放
new 型別[ ]
delete[ ] 指標
1 c++的記憶體管理方式:
void test()
2new 和 delete 在申請自定義型別空間時,new會呼叫建構函式, delete 會呼叫析構函式
new 實際呼叫 operater new 再底層呼叫 malloc,如果申請成功,返回乙個只想申請空間位址的指標,申請失敗會檢視應對措施,成功返回指標,失敗丟擲異常
delete 底層呼叫 free 釋放空間
operate new 和 operate delete 類的專屬過載
一般只用來在類中檢查記憶體洩漏 ,定位記憶體洩露的位置
類 的new 和 delete 的原理
new呼叫malloc 在申請空間上執行類的建構函式,
delete 呼叫類的析構函式,先清理類中的資源,再呼叫free釋放申請的物件的空間
new 和 delete 實際上是執行多次;
定位new表示式 new placement ;
這個表示式用於在已知申請的空間上建立物件,一般配合記憶體池使用,因為記憶體池申請的空間沒有初始化(我們實際上經常用空間配置器 allocator)
定位new表示式格式
new+(指標)+ 型別名 或new(指標)+型別名+(初始化列表)
1 malloc 和free 是函式,new delete 是操作符;
2 malloc 申請的空間沒有初始化,new 可以初始化
3 malloc 申請空間時,需要手動計算所需空間大小,new會自己計算,我們只需要接上型別就可;
4 malloc 返回值為 void* 我們需要時必須強轉,new不需要,new後接型別
5malloc 申請失敗返回 null;,因此使用是必須判空,new需要捕獲異常;
6 申請自定義型別物件空間時,malloc 只開闢空間,new 會呼叫建構函式構造出乙個物件,free 不會呼叫析構函式。而delete 會呼叫析構函式釋放內中的資源,再呼叫free空間
7malloc free是在堆上 操作,而new delete 不一定在堆上 (例如類中申請物件時必須在棧上,空間介面卡allocator等)
new的空間不用delete的例子:
new placement/記憶體池:
如果我們使用非堆上的空間則不要delete;這時new只是在已經存在的空間上執行乙個建構函式,不管理空間分配,因而空間的管理權不為new物件所有,new物件只要在最後保證執行了析構函式就可以了----new placement的用法;
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...