C 動態記憶體管理

2021-10-11 14:32:50 字數 1017 閱讀 6754

c/c++程式執行起來,記憶體劃分的區域,以及每個區域的作用:

記憶體對映段:是高效的i/o對映方式,用於裝載乙個共享的動態記憶體庫,使用者可使用系統介面建立共享記憶體,做程序間通訊;

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

**段:可執行的** / 常量

進行分割槽的原因---->方便資料的管理

相同點:

不同點:

3.1、區別

相同點:

都是從堆上申請空間,並且需要使用者手動釋放。

不同點:

malloc和free是函式,使用時需要加標頭檔案;new/delete是操作符,c++中關鍵字,可以直接使用;

malloc申請的空間不會初始化;new可以初始化;

malloc申請空間時,需要手動計算空間大小並傳遞;new只需在其後跟上空間的型別即可;

malloc的返回值為 void* ,在使用時必須強轉;new不需要,因為new後跟的是空間的型別;

malloc申請空間失敗時,返回的是null,因此使用時必須判空;new不需要,但是new需要捕獲異常;

申請自定義型別物件時,malloc/free只會開闢空間,不會呼叫建構函式與西溝含糊;而new在申請空間後會呼叫建構函式完成物件的初始化,delete在釋放空間前會呼叫析構函式完成空間中資源的清理。

3.2、new/delete的底層實現原理

new在底層呼叫operator new全域性函式來申請空間;

delete在底層呼叫operator delete全域性函式來釋放空間。

operator new實際上是通過malloc來申請空間的;operator delete實際上是通過free來釋放空間

內建型別:

如果申請的是內建型別的空間,new/delete和malloc/free基本相似。

不同之處是:new在申請空間失敗會拋異常;malloc在申請空間失敗會返回null。

自定義型別:

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