ms-help://MS.MSDNQTR.2003FEB.1033/memory/base/low_fragmentation_heap.htm
The LFH avoids fragmentation by managing all allocated blocks in 128 predetermined different block-size ranges. Each of the 128 size ranges is called a bucket. When an application needs to allocate memory from the heap, the LFH chooses the bucket that can allocate the smallest block large enough to contain the requested size.
The smallest block that can be allocated is 8 bytes. The granularity of the first 32 buckets is 8 bytes. The first bucket is used for allocations between 1 and 8 bytes in size. The next bucket is used for allocations between 9 and 16 bytes in size, and so on until the 32nd bucket, which is used for allocations between 249 and 256 bytes in size. The granularity of buckets 33 to 127 is 16 bytes. The 33rd bucket is used for allocations between 257 and 272 bytes in size. The 34th bucket is used for allocations between 273 and 288 bytes in size, and so on. The final bucket (128th) is used for allocations between 15,873 and 16,384 bytes in size.
For example, if an application needs to allocate 10 bytes of memory, the smallest block size that can accommodate this request is 16 bytes. Bucket two is used for allocations that are 16 bytes in size, therefore, the LFH will allocate the memory from bucket two.
If the allocation is not a multiple of eight, there will be unused bytes. This is another form of fragmentation called internal fragmentation. The LFH was designed to balance internal and external fragmentation.
发现和vm的动态内存管理几乎是一模一样,^_^
开来还是蛮有先见之明的!
这种内存管理方式在速度和内存使用率之间作了一个折中。
目前LFH只能在XP上使用。