首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

GlobalAlloc、malloc 與 new 的差異比較

     編輯:關於C++

GlobalAlloc

  • Win16 遺留 API,Win32 已棄用,僅為相容保留。
  • 回傳控制代碼(HGLOBAL),需 GlobalLock 取得指標。
  • 32 位元系統下實際呼叫 HeapAlloc,進程間隔離,無「全域」共享記憶體。

malloc / free

  • C 執行期庫函式,標準 C/C++ 可攜。
  • 缺乏 Windows 記憶體管理特性(如壓縮、頁面鎖定)。
  • 不呼叫建構/解構函式,僅適用 POD 型別。

new / delete

  • C++ 運算子,編譯器管理。
  • 自動呼叫建構函式(new T)與解構函式(delete p)。
  • 可多載(類別專屬或全域),支援 placement new。
  • 通常以 malloc 為底層實作,但非強制。

HeapAlloc / CoTaskMemAlloc

  • HeapAlloc:直接向核心堆分配,適合大區塊、需精確控制。
  • CoTaskMemAlloc:COM 任務記憶體分配器,跨模組/進程傳遞記憶體必用。

比較表

特性GlobalAllocmallocnewHeapAlloc
層級OS API (舊)CRTC++ OperatorOS API (核心)
建構/解構無無自動無
型別安全無無有無
擴充性無無可多載無
推薦用途舊代碼維護C 程式/介接 C 庫C++ 物件大區塊/特殊堆需求

最佳實務

  • C++ 專案一律使用 new/delete(或智慧指標/容器)。
  • 介接 C 庫時用 malloc/free,轉換邊界處理所有權。
  • 大量記憶體、特殊對齊、需 MEM_LARGE_PAGES 等:HeapAlloc。
  • COM 介面傳遞緩衝區:CoTaskMemAlloc/Free。
  • 絕不混用:new 配 delete,malloc 配 free,GlobalAlloc 配 GlobalFree。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved