比較記憶體配置方法
以下是各種記憶體配置方法的簡短比較:
- CoTaskMemAlloc
- GlobalAlloc
- HeapAlloc
- LocalAlloc
- malloc
- new
- VirtualAlloc
雖然 GlobalAlloc、 LocalAlloc和 HeapAlloc 函式最終會從相同的堆積配置記憶體,但每個函式都會提供一組稍微不同的功能。 例如,如果無法配置記憶體,可以指示 HeapAlloc 引發例外狀況,這是 LocalAlloc無法使用的功能。 LocalAlloc 支援配置控制碼,允許重新配置來移動基礎記憶體,而不需變更控制碼值, 這是 HeapAlloc無法使用的功能。
從 32 位 Windows 開始, GlobalAlloc 和 LocalAlloc 會實作為包裝函式,以使用處理程式的預設堆積控制碼呼叫 HeapAlloc 。 因此, GlobalAlloc 和 LocalAlloc 的負擔大於 HeapAlloc。
因為不同的堆積配置器會使用不同的機制來提供獨特的功能,所以您必須使用正確的函式釋放記憶體。 例如,使用 HeapAlloc 配置的記憶體必須使用 HeapFree 釋放,而不是 LocalFree 或 GlobalFree。 使用 GlobalAlloc 或 LocalAlloc 配置的記憶體,必須使用對應的全域或本機函式來查詢、驗證及釋放。
VirtualAlloc函式可讓您指定記憶體配置的其他選項。 不過,其配置會使用頁面細微性,因此使用 VirtualAlloc 可能會導致較高的記憶體使用量。
malloc函式的缺點是執行時間相依。 new運算子的缺點是編譯器相依和語言相依。
CoTaskMemAlloc函式具有在 C、C++ 或 Visual Basic 中運作良好的優點。 這也是在 COM 型應用程式中共用記憶體的唯一方式,因為 MIDL 使用 CoTaskMemAlloc 和 CoTaskMemFree 封送處理記憶體。
範例
相關主題