C 動態記憶體管理

2021-08-03 19:28:55 字數 1260 閱讀 8121

1:總結並剖析malloc/free和new/delete之間關係和差異。 

1)他們都是動態記憶體管理的入口

2)malloc要計算空間大小,返回值要強轉

new自動計算位元組大小,返回值是相應型別的指標

3)malloc只開闢空間

new開闢空間+呼叫建構函式初始化

delete呼叫析構函式清理+釋放空間

4)malloc是庫函式

new是操作符

5)malloc失敗返回0

new失敗返回包異常

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

new:

1)呼叫operator new 開闢空間

2)呼叫建構函式初始化

3)返回該指標

delete:

1)呼叫析構函式進行清理工作

2)呼叫 operator delete 釋放空間

new:

1)呼叫operator new開闢空間,多開闢4位元組空間儲存陣列物件個數

2)每個物件分別呼叫建構函式初始化

3)返回陣列指標

delete:

1)指標前移獲取陣列物件個數n,呼叫n次析構函式

2)呼叫 operator delete 釋放空間

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

new_array:

1)在ptr上開闢乙個n個type型別元素+4位元組的空間

2)在該空間前4個位元組儲存物件的個數,為了delete做準備

3)ptr指標後移4位元組,呼叫定位new的表示式進行初始化操作

#define new_array(ptr, type, n) \

do{ \

ptr = (type*)operator new (sizeof(type)*n + 4); \

*((int*)ptr) = n; \

ptr = (type*)((int*)ptr+1); \

for(int i=0; i

delete_array:

1)在陣列前4個位元組讀取元素個數n

2)把每個物件進行析構函式呼叫

3)釋放空間

#define delete_array(ptr, n) \

do{ \

n = *((*int)ptr - 1); \

int i = 0; \

for(i=0; i

C 動態記憶體管理

我們都知道在c 中可以用new malloc動態分配記憶體空間,delete free釋放動態開闢的記憶體空間。1.那麼既然c 中有了可以動態開闢記憶體的函式為什麼又要有new delete呢?c 中的malloc free是繼承c語言中的malloc free,它的用法和在c語言中的用法一模一樣。...

c 動態記憶體管理

c語言動態記憶體管理 c中關於動態記憶體的標準庫函式 malloc calloc realloc free 以下是關於這幾個函式的介紹 1 malloc 用於動態開闢記憶體 堆空間 返回型別為void 引數 size t size 是無符號整型表示要開闢的空間大小,單位是位元組,2 calloc 用...

c 動態記憶體管理

c語言動態記憶體管理 c語言使用malloc calloc realloc free進行動態記憶體管理 malloc是不初始化的開闢空間,其引數為空間的大小,單位為位元組 calloc是初始化的進行開闢空間,其引數為 元素個數,大小 單位為位元組。realloc增容,如果後面的空間足夠的話,就直接追...