比較記憶體配置方法

以下是各種記憶體配置方法的簡短比較:

雖然 GlobalAllocLocalAllocHeapAlloc 函式最終會從相同的堆積配置記憶體,但每個函式都會提供一組稍微不同的功能。 例如,如果無法配置記憶體,可以指示 HeapAlloc 引發例外狀況,這是 LocalAlloc無法使用的功能。 LocalAlloc 支援配置控制碼,允許重新配置來移動基礎記憶體,而不需變更控制碼值, 這是 HeapAlloc無法使用的功能。

從 32 位 Windows 開始, GlobalAllocLocalAlloc 會實作為包裝函式,以使用處理程式的預設堆積控制碼呼叫 HeapAlloc 。 因此, GlobalAllocLocalAlloc 的負擔大於 HeapAlloc

因為不同的堆積配置器會使用不同的機制來提供獨特的功能,所以您必須使用正確的函式釋放記憶體。 例如,使用 HeapAlloc 配置的記憶體必須使用 HeapFree 釋放,而不是 LocalFreeGlobalFree。 使用 GlobalAllocLocalAlloc 配置的記憶體,必須使用對應的全域或本機函式來查詢、驗證及釋放。

VirtualAlloc函式可讓您指定記憶體配置的其他選項。 不過,其配置會使用頁面細微性,因此使用 VirtualAlloc 可能會導致較高的記憶體使用量。

malloc函式的缺點是執行時間相依。 new運算子的缺點是編譯器相依和語言相依。

CoTaskMemAlloc函式具有在 C、C++ 或 Visual Basic 中運作良好的優點。 這也是在 COM 型應用程式中共用記憶體的唯一方式,因為 MIDL 使用 CoTaskMemAllocCoTaskMemFree 封送處理記憶體。

範例

全域和區域函式

堆積函式

虛擬記憶體函式