低片段堆積
[本主題中的資訊適用於 Windows Server 2003 和 Windows XP。 從 Windows Vista 開始,系統會視需要使用低片段堆積 (LFH) 來服務記憶體配置要求。 應用程式不需要為其堆積啟用 LFH。]
堆積片段是可用記憶體分成小型非連續區塊的狀態。 當堆積分散時,即使堆積中可用的記憶體總數足以滿足要求,記憶體配置也會失敗,因為沒有記憶體的單一區塊夠大。 低片段堆積 (LFH) 有助於減少堆積片段。
LFH 不是個別的堆積。 相反地,這是應用程式可以為其堆積啟用的原則。 啟用 LFH 時,系統會在特定預先決定的大小中配置記憶體。 當應用程式向已啟用 LFH 的堆積要求記憶體配置時,系統會配置大小足以包含所要求大小的最小記憶體區塊。 在目前的實作中,系統不會針對大於大約 16 KB 的配置使用 LFH,不論是否啟用 LFH。
應用程式應該只針對呼叫進程的預設堆積或應用程式已建立 私人堆積啟用 LFH。 若要啟用堆積的 LFH,請使用 GetProcessHeap 函式來取得呼叫進程預設堆積的句柄,或使用 HeapCreate 函式所建立的私人堆積句柄。 然後使用句柄呼叫 HeapSetInformation 函式。
LFH 無法針對使用 HEAP_NO_SERIALIZE 建立的堆積,或針對以固定大小建立的堆積啟用。 如果您使用適用於 Windows 的偵錯工具 中的堆積偵錯工具,或 應用程式驗證器,則也無法啟用 LFH。
在堆積啟用 LFH 之後,就無法停用。
受益於 LFH 大部分的應用程式都是多線程應用程式,這些應用程式經常配置記憶體,且使用各種配置大小,舒適地低於 16 KB。 不過,並非所有應用程式都受益於 LFH。 若要評估在應用程式中啟用LFH的效果,請使用效能分析數據。