动态内存管理

近来在msdn闲逛时看到一编关于LFH的文章:
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上使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值