| 特性 | malloc / free | new / delete |
|---|---|---|
| 性質 | C 標準庫函式 | C++ 運算子(可重載) |
| 建構/解構 | **不呼叫** 建構函式/解構函式 | **自動呼叫** 建構函式/解構函式 |
| 型別安全 | 回傳 void* 需強轉 | 回傳精確型別指標 |
| 失敗處理 | 回傳 NULL | 拋 std::bad_alloc 例外 |
| 陣列支援 | 手動計算總大小 | new T[n] / delete[] 自動管理元素個數 |
operator new(size_t) **通常內部呼叫 malloc** 分配原始記憶體,再呼叫建構函式。operator delete 呼叫解構函式後 **內部呼叫 free** 釋放記憶體。malloc 記憶體**不可**用 delete 釋放(缺少解構),new 記憶體**不可**用 free 釋放(缺少解構且記憶體頭部資訊可能不同)。new T[100]:分配 sizeof(T)*100 + 額外空間(存元素個數),回傳指向首元素的指標。delete[] ptr:從指標前端讀取元素個數,**逆序呼叫 100 次解構函式**,最後釋放整塊記憶體。new T[100] 搭配 delete ptr(僅呼叫 1 次解構函式 → 記憶體洩漏/未定義行為)。作業系統提供的虛擬記憶體區域,C 執行期庫(CRT)維護**自由塊鏈表/紅黑樹/分級分配器**(如 ptmalloc、jemalloc、tcmalloc)管理已分配/未分配區塊,malloc/free 實際操作這些資料結構。