C 的記憶體管理方式

2021-08-19 05:52:47 字數 1064 閱讀 5000

c語言記憶體管理方式在c++中可以繼續使用,同時c++又提出了自己的記憶體管理方式:通過new和delete運算子進行動態記憶體管理。

舉例來說明他們的使用:

void test()

new和delete,new和delete一定要配合使用,不然就會導致記憶體洩漏或者崩潰的問題:

new申請空間時會將括號中的物件個數填寫到空間的前4個位元組(用int型儲存,所以是4個位元組),然後將空間首位址向後偏移4個位元組。

delete釋放空間時會先到要釋放的物件位址的前4個位元組取出n,然後呼叫n次的 析構函式 來釋放物件。如果使用delete(或者free)就無法得到呼叫析構函式的次數,從而造成記憶體洩漏的問題。

那為什麼c庫已經有了malloc和free等來動態管理記憶體,c++還要定義new/delete來動態管理記憶體呢?

我認為是為了c++中的構造與析構函式而創造出的,動態記憶體管理中建立物件需要先為新物件申請空間(maclloc),然後初始化成員,而new運算子的功能就是先申請空間,然後呼叫建構函式來初始化成員。

銷毀物件時,需要先呼叫析構函式來清理物件的資源,然後釋放空間(free),這就是delete的使命。

new/delete其實就是malloc/free的封裝,只是增加了一些c++中的功能。

下面總結一下malloc/free與new/delete的區別和聯絡:

1.它們都是動態管理記憶體的入口

2.malloc/free是c/c++標準庫的函式,而new/delete是c++操作符

3.malloc/free只是動態分配記憶體空間/釋放空間,而new/delete除了分配空間還會呼叫建構函式和析構函式進行初始化與清理成員

4.malloc/free需要手動計算型別大小且返回值是void*,需要自己轉換型別,new/delete可以自己計算型別的大小,返回對應型別的指標。

如果要在c++中使用malloc/free,需要注意malloc不會呼叫建構函式,free不會呼叫析構函式。切忌不要將malloc/free與new/delete混搭使用!

C 記憶體管理方式

c 中通過new和delete運算子進行動態記憶體管理 如圖 注意 new delete new和delete一定匹配使用 c庫malloc free等來動態管理記憶體,為什麼c 還要定義new delete運算子來動態管理記憶體呢?因為 c語言是面向過程的語言,錯誤返回錯誤碼,c 是物件導向的語言...

C 記憶體管理方式

在c 中,記憶體分為 棧 堆 自由儲存區 全域性 靜態儲存區 常量儲存區。棧,在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束是這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率高,分配的記憶體容量有限。堆,就是那些由malloc等分配的記憶體塊,用free來...

記憶體管理方式

記憶體管理方式 塊 段 頁 段頁 頁式管理 頁式管理的基本原理將各程序的虛擬空間劃分成若干個長度相等的頁 page 頁式管理把記憶體空間按頁的大小劃分成片或者頁面 page frame 然後把頁式虛擬位址與記憶體位址建立一一對應頁表,並用相應的硬體位址變換機構,來解決離散位址變換問題。頁式管理採用請...