動態記憶體管理

2021-08-10 04:29:28 字數 958 閱讀 9284

1:malloc/free和new/delete之間關係和差異。

共同點:他們都是動態管理記憶體的入口

不同點:

(1)malloc/free是c/c++的標準庫函式,而

new/delete是c++操作符;

(2)malloc/free使用時要自己對於型別大小進行計算,返回值為void*;

new/delete使用時不需要自己計算型別大小,返回值為對應型別的指標;

(3)malloc/free只是動態分配記憶體空間,

new/delete除了分配空間,還會呼叫建構函式和析構函式進行初始化和清理;

(4)malloc/free如果失敗了返回0,

new/delete如果失敗了會拋異常。

2:new/delete、new/delete到底做了些什麼事情

new: 先呼叫 operator new分配空間,然後呼叫建構函式初始化物件。

delete: 先呼叫析構函式清理物件,然後呼叫

operator delete釋放空間。

new[n]:

先呼叫 operator new分配空間,然後呼叫n次建構函式初始化物件。

delete:

先呼叫n次析構函式清理物件,然後呼叫

operator delete釋放空間。

3:new_array/delete_array巨集,模擬new/delete申請和釋放陣列。

#define

_crt_secure_no_warnings

#define

new_array(ptr,type,n)                   \ do

while

(false);

#define

delete_array(ptr,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...