STL 動態記憶體管理

2021-08-09 16:13:35 字數 1309 閱讀 7203

2.malloc開闢的空間沒有初始化,不是物件,而new出來的是物件,先呼叫malloc開闢空間,再呼叫呼叫了建構函式初始化這片空間。free釋放了這片空間,而delete則先是呼叫析構函式,在呼叫free進行釋放空間。

3.malloc和free是c語言所用的函式,而new和delete是c++的操作符。

c語言用

malloc calloc realloc/free進行記憶體管理

malloc:向堆申請一塊空間,並且返回乙個void型別的指標,這時我們需要將這個指標進行強轉為我們需要的型別。

calloc: 和malloc一樣都是申請一塊空間,有所不同的是,它可以指定一次分配多少塊這樣大小的空間。

realloc:在原來有的空間上進行追加的分配,也就是當你現在的空間不夠使用了,需要保留原來的資料,但同時需要多一點的空間來存放新的內容時。

下面是我用圖來進行對realloc進行說明:

c++的動態分配:

c++用new,detele來進行動態分配的。

下面我們看下new delete是怎麼開闢空間的:

下面我們通過除錯我們看一下它們工作過程:

class a

~a()

protected:

int _a;

};int main()

通過除錯看到下面情況:

這裡還有乙個問題如下:當我顯示寫出析構函式和使用預設的差別:

下面我們簡單的通過巨集來模擬我們new和delete:

#define new_array(point,type,size)                           \

do while (0);

//#define delete_array(point,type) \

do \

while (false);

動態記憶體管理

首先應該明白物件的三種內部的儲存方式 自動儲存,靜態儲存,和動態儲存。當執行離開當期程式塊的時候,堆疊指標返回到它進入程式塊 之前的地方,有效的銷毀了那個程式塊的自動變數。重新進入這個塊會再次建立所有的自動變數。靜態物件宣告或者在檔案域中。動態物件是存在系統呼叫 的在執行期中建立並且儲存在堆中,這是...

動態 記憶體管理

定義變數時,必須制定其資料型別和名字。而動態建立物件時,只需指定其資料型別,而不必為該物件命名。取而代之的是,new表示式返回指向新建立物件的指標,我們通過該指標來訪問此物件。int i int pi new int 這個new表示式在自由儲存區中分配建立了乙個整型物件,並返回此物件的位址,並用該位...

動態記憶體管理

c語言使用malloc calloc realloc free進行動態記憶體管理。void test c 通過new和delete動態管理記憶體。new delete動態管理物件。new delete動態管理物件陣列。void test void test int globalvar 1 stati...