c 動態記憶體管理

2021-08-21 02:13:00 字數 1033 閱讀 1946

void* malloc(位元組數)

void* calloc  (元素個數,元素大小):初始化 0

void* realloc (void* p  ,size )

p---->null:malloc

非空:size---->變小--->縮小原空間

非空:size---->變大--->不能原地擴充套件的話,就重新找一塊空間

@new/delete會呼叫 構造和析構函式,malloc/free不會,因為malloc出來得空間不是乙個完整的物件

new操作符的作用:

@申請物件的空間:

呼叫oparetor  new 函式,用 malloc連續申請,直到申請成功

如果申請失敗,是否有空間不足的應對措施,有:繼續申請,沒有:拋異常

@呼叫建構函式,初始化物件

deleete操作符的作用:

@呼叫析構函式,清理物件的資源

@銷毀物件空間

呼叫operator delete函式,用free進行銷毀

t* pt=new t [n]的具體實現:

@呼叫operator new [ ] ( sizeof (t) * n+4 ),

--->operator new  (sizeof (t)*n + 4)

---->malloc

pt 是operator new [ ] 返回值向後偏移4個位元組的位置

除了會申請所需的物件資源外,還會額外申請4個位元組,用來儲存本次申請物件的個數,為了讓delete知道應該釋                              放的次數

delete [ ] pt;的具體實現:

1,清空資源

>>pt 先前偏移四個 位元組,取物件個數(呼叫析構函式的次數)

>>for()呼叫析構函式去釋放物件涉及的資源

2,釋放空間

operator delete [ ] ----> operator delete ---->free (pt)

注意:pt是基類指標就只呼叫基類的析構函式,pt是派生類指標就先呼叫派生類指標,再呼叫基類指標。

C 動態記憶體管理

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

C 動態記憶體管理

1 總結並剖析malloc free和new delete之間關係和差異。1 他們都是動態記憶體管理的入口 2 malloc要計算空間大小,返回值要強轉 new自動計算位元組大小,返回值是相應型別的指標 3 malloc只開闢空間 new開闢空間 呼叫建構函式初始化 delete呼叫析構函式清理 釋...

c 動態記憶體管理

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