C C 動態記憶體管理的區別

2021-09-29 05:39:02 字數 2243 閱讀 7206

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...