Куча с низкой фрагментацией
[Сведения в этом разделе относятся к Windows Server 2003 и Windows XP. Начиная с Windows Vista, система использует кучу с низким уровнем фрагментации (LFH) по мере необходимости для обслуживания запросов на выделение памяти. Приложениям не нужно включать LFH для кучи.]
Фрагментация кучи — это состояние, в котором доступная память разбивается на небольшие несмежные блоки. Если куча фрагментирована, выделение памяти может завершиться ошибкой, даже если общего объема доступной памяти в куче достаточно для выполнения запроса, так как ни один блок памяти не является достаточно большим. Куча с низким уровнем фрагментации (LFH) помогает уменьшить фрагментацию кучи.
LFH не является отдельной кучей. Вместо этого это политика, которую приложения могут включить для своих куч. Если LFH включен, система выделяет память в определенных заранее определенных размерах. Когда приложение запрашивает выделение памяти из кучи с включенным LFH, система выделяет наименьший блок памяти, достаточно большой для хранения запрошенного размера. В текущей реализации система не использует LFH для распределения объемом более 16 КБ независимо от того, включен ли LFH.
Приложение должно включать LFH только для кучи по умолчанию вызывающего процесса или для частных кучи, созданных приложением. Чтобы включить LFH для кучи, используйте функцию GetProcessHeap , чтобы получить дескриптор к куче по умолчанию вызывающего процесса, или используйте дескриптор для частной кучи, созданной функцией HeapCreate . Затем вызовите функцию HeapSetInformation с дескриптором.
LFH нельзя включить для кучи, созданных с помощью HEAP_NO_SERIALIZE , или для кучи, созданных с фиксированным размером. LFH также нельзя включить, если вы используете средства отладки кучи в средствах отладки для Windows или в средстве проверки приложений.
После включения LFH для кучи его нельзя отключить.
Приложения, которые больше всего выигрывают от LFH, — это многопоточные приложения, которые часто выделяют память и используют различные размеры выделения менее 16 КБ. Однако не все приложения могут воспользоваться преимуществами LFH. Чтобы оценить влияние включения LFH в приложении, используйте данные профилирования производительности.