C C 記憶體管理

2021-08-25 08:51:08 字數 3046 閱讀 6898

1.相同點

失敗:null

2)使用之前都要進行判斷是否為空

3) 釋放空間的方式:free

4) 返回值:void* (可以強制型別轉換)

2.不同點

1)  malloc 引數:(位元組數)  功能:負責將空間給出

2)calloc 引數:(單個元素位元組數,元素個數)  功能:給出空間,且對空間進行初始化為0

若p為null,則realloc功能和malloc相同。

若p不為null:

1、c++管理記憶體的例子

2.總結:

new 做了兩件事:1)呼叫operator new 分配空間

2)呼叫建構函式初始化物件

delete也做了兩件事:1)呼叫析構函式清理物件

2)呼叫operator delete 釋放空間

new [n] :1) 呼叫operator new 分配空間

2) 呼叫n次建構函式初始化每個物件

delete [n]: 1)呼叫n次析構函式清理物件 (棧序,倒著銷毀)(4中給出n的由來,請看下面)

2) 呼叫operator delete 釋放空間 (空間起始位置進行free)

編譯器在new出的陣列物件頭指標向前4個位元組中記錄了物件的數目(4個位元組對應乙個int值)

注意:new和delete、new[ ]和delete[ ] 一定要匹配使用!!!

malloc  /  free 在c++中也是可以使用的,只是malloc和free在c++中不能分別呼叫建構函式和析構函式來初始化物件和釋放物件

3.不同的型別記憶體洩漏問題

對於內建物件,如果沒有匹配釋放,不會造成記憶體洩漏。

對於自定義型別(class,struct)且析構函式顯式給出的情況:

1)如果沒有匹配使用,記憶體洩漏&程式崩潰。

2)如果析構函式沒有給出,也沒有來匹配使用,可能會造成記憶體洩漏。

.4.析構函式對記憶體洩漏的影響

1)給出析構函式

malloc ---> delete / delete [ ] (free)

new ------>delete / delete [ ] (free)

new [ ]-----> delete / delete [ ] (free)

2)沒有給出析構函式

new--->free : 物件中的資源沒有清理

new---->delete [ ] :一定會崩潰

new [ ] ---> free :物件中的資源沒有清理&一定會崩潰

new [ ]--->delete :只會銷毀乙個物件(n-1)個物件沒有清理&一定會崩潰。

1.含義:在已經存在的空間上執行建構函式

3.呼叫方式:operator new (size_t    void*where)比如:

int main()

1.malloc / free :c語言中      new / delete :c++中2.malloc / free :是函式         new / delete :  操作符3.引數上:malloc(位元組數)    new + 型別4.返回值上:malloc-->void* (可以強制轉換)    new 不需要5.malloc 要判斷是否為空     new 有應用措施,不要判空,捕獲異常

6.malloc / free :不會呼叫構造/析構函式        new/delete:會呼叫構造/析構函式

7.malloc :不能初始化             new可以初始化

8.malloc  :在堆上申請        new:不一定在堆上,operator new(可以自定義申請的位置空間)

1.使用系統自帶的記憶體洩漏的檢測工具。

2.自己寫乙個記憶體洩漏檢測工具。

3.使用第三方工具:vld,debugdiag  tools等。

1 良好的程式設計規範

2.智慧型指標

c c 記憶體管理

我一直覺得記憶體是很複雜的東西.也許我把這篇文章完成的時候,我會了解一點c 的記憶體管理機制 從硬體開始 記憶體器位址空間 匯流排位址空間 cpu位址空間 虛擬記憶體位址空間 程式位址空間 邏輯位址空間 程式位址空間對c 程式設計師來說是可見的,其他位址空間我們並不關心 通過列印pointer的值 ...

C C 記憶體管理

寫乙個好的c 程式,我們要懂得好多東西,比如說最基本的物件導向程式設計思想,c 的封裝 繼承 多型機制,設計模式等,還有乙個很重要的內容便是效能優化,像c c 這種接近底層的語言,追求的就是效能,與之相關的一項內容便是記憶體管理,記憶體分配要合理,禁止破壞記憶體,不能有記憶體洩漏,操作不好的話,程式...

C C 記憶體管理

首先來看一下c c 中記憶體的分布 棧區 又稱作堆疊,非靜態區域性變數,函式引數,返回值都是儲存在棧區的,函式棧幀的建立也是在棧區的 一般棧區的大小只有十幾m 資料段 存放靜態資料和全域性資料的。段 存放可執行的 和唯讀常量。了解完記憶體的分布接下來我們來了解記憶體的管理方式 在c語言中記憶體的管理...