低碎片堆

本主題中的信息適用於Windows Server 2003和Windows XP中。從Windows Vista開始,系統根據需要使用低碎片堆(LFH)來對記憶體分配的請求提供服務。應用程式並不需要啟用LFH堆

基本介紹

  • 中文名:低碎片堆
  • 外文名:Low-fragmentation Heap
堆碎片是一種狀態,在這種狀態,可用記憶體被分割成小的、不連續的塊。當一個堆被碎片化後,記憶體分配會失敗,即使總的可用記憶體是足夠滿足請求的,但單個塊記憶體卻不足夠大。LFH可以幫助減少堆碎片。
LFH是套用可以採用的一種對堆使用的策略。當LFH被打開時,系統會用某種預估的size來分配記憶體。當套用從堆中請求記憶體時,系統會分配記憶體中比請求塊大的最小的塊。如果分配的size超過16KB,無論LFH打開與否都不會使用LFH。
應用程式應該只對調用進程的默認堆和應用程式創建的私有堆打開這個選項。要啟用LFH堆,進程使用GetProcessHeap來獲取默認堆的句柄或使用HeapCreate函式來創建一個私有堆的句柄,然後用這個句柄使用HeapSetInformation函式
//註明:HeapCreate創建私有堆,GetProcessHeap獲取進程堆。
//區別:1、如果你有一段短暫的堆活動,使用私有堆,可以比進程堆更快。2、私有堆的堆操作是執行緒安全的不需要同步。還有其他的原因,但是這兩個是比較常見的。
對使用HEAP_NO_SERIALIZE 創建的堆或者對固定大小的堆不能打開LFH選項。如果你在使用heap debugging tools in windbg 或者Appverifier,LFH也是不能打開的。
一旦LFH被打開,就不能被關閉。
對於那些經常分配記憶體、並且分配大小小於16K的多執行緒程式而言,LFH是很有用的。但是,不是所有的套用都可以從LFH中獲益。
引用:微軟MSDN

相關詞條

熱門詞條

聯絡我們