C 動態記憶體管理

2021-10-25 15:41:03 字數 1644 閱讀 5738

核心空間:作業系統相關的**,使用者不能直接訪問。

棧(由上到下):儲存非靜態區域性變數、函式引數、返回值。

記憶體對映段:靜態庫,動態庫。

堆(由下到上):程式執行時動態記憶體分配,malloc,calloc,realloc,new,new申請的空間。

資料段:儲存全域性變數、靜態資料。

**段:可執行**,唯讀常量。

相同點:

不同點:

malloc:

- 返回值:void*,引數:n(需要申請空間的位元組數)

calloc

- 返回值:void* ,引數:n,size(n:要申請空間的個數,size:單個元素型別的大小)

- 用calloc申請空間的總大小為number* size。

- calloc在申請空間時,預設對其區域進行初始化操作,預設初始化的值為0。

realloc

- 返回值:void*,引數:p,size(將p指向的空間調整到size位元組)

注意:此時分為兩種情況:

- 1、size<=oldsize(p空間原本大小)

直接將p空間縮小到size,返回p空間位址。

- 2、size>oldsize

void

testfunc()

class

date

~date()

private

:int d;};

void

testfunc()

在申請空間上忙new申請的空間會呼叫建構函式,malloc只會申請出乙個空間,delete會呼叫析構函式,free不會。

注意 :在申請空間與釋放空間時,new與delete,malloc與free必須成對出現。否則會出現錯誤。

new/delete

int

* p1 =

newint[10

];//申請10個int型空間

delete

p1;date* p2 =

new date[10]

;//申請10個自定義型別空間

delete

p2;

void

*operator

new(size_t size)

void operator delete()。

第一步呼叫析構函式,釋放物件中的資源

在釋放物件資源結束前最後一句,呼叫free()函式,釋放物件空間。

operator new 實際也是通過malloc來申請空間,如果malloc申請空間成功就直接返回,否則執行使用者提供的空間不足應對措施,如果使用者提供該措施就繼續申請,否則就拋異常。operator delete最終是通過free來釋放空間。

new[ ]底層原理

delete[ ]底層原理

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