C 之記憶體申請malloc new的區別

2021-10-04 06:19:07 字數 816 閱讀 7950

malloc/free是c的庫函式,new/delete是c++的運算子,都用於動態申請記憶體和釋放記憶體;

第二,對於非內部資料型別的物件,物件在建立時要自動構造,銷毀前要自動析構,這種情況只能用new/delete,因為malloc/free是庫函式,不在編譯器控制許可權內,不能把構造和析構的任務強加到malloc/free上。

new才佐夫是從自由儲存區上為物件動態分配記憶體空間,而malloc是從堆上分配空間。自由儲存區是c++基於new操作的乙個抽象概念。凡是通過new操作符進行記憶體申請,該記憶體即為自由儲存區。而堆是作業系統中的術語,是作業系統所維護的一塊特殊的記憶體,用於程式的記憶體動態分配。自由儲存區不僅可以是堆,還可以是靜態儲存區,這都得看new在**為物件分配記憶體。

new分配成功時,返回物件型別的指標,型別於物件進行匹配,無須繼續型別轉換,故new是符合型別安全性的操作符。

而malloc記憶體分配是返回void* ,需要通過強制轉換void* 指標轉換構成我們所需要的型別。

new失敗是會丟擲bac_alloc一場,他不會返回null

malloc分配失敗時會返回null

new無需指派需分配的大小,編譯器會根據型別自動計算

malloc需要顯示指派空間大小

new:

呼叫operator new操作符,分配一塊足夠大的空間,原始的,未命名的;

編譯器執行相應的建構函式以構造物件,並為其傳入初值;

物件構造完成後返回乙個指向該物件的指標;

delete:

呼叫物件析構;

呼叫delete

malloc又realloc可以重新計算大小,new不行,new無法直接處理

C 之記憶體分配

很多人都覺得學習 c 是特別困難的事情。c 學習是比較複雜的 它的記憶體分配 指標 以及物件導向思想的實現等等,確實需要一定的技術積累。我們將以專題的形式,為大家逐一剖析 c 的技術重點和難點。本專題討論的就是記憶體分配。學習 c 如果不了解記憶體分配是一件非常可悲的事情。而且,可以這樣講,乙個 c...

c 之記憶體管理

c 使用3 種不同解決方案儲存資料,區別是資料保留在記憶體中的時間 兩種儲存持續性為自動 自動變數和暫存器變數 register 沒有記憶體位址 堆疊 在函式外定義的變數和使用關鍵字static定義的變數的儲存持續性都為靜態.分為 3 外部鏈結性,內部鏈結性和無鏈結性 所有靜態變數都有下面的兩個初始...

C之記憶體分配

常見記憶體分配的錯誤 記憶體分配方式 1.靜態儲存區域 內存在程式編譯的時候就分配好,這塊內存在程式的整個執行期間都存在,如全域性變數 static變數 2.棧 在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時,這些儲存單元會被自動釋放。效率高,但分配的記憶體容量比較有限。3...