【发布时间】:2012-10-08 03:54:40
【问题描述】:
我在http://msdn.microsoft.com/en-us/library/ee292117.aspx 和http://msdn.microsoft.com/en-us/library/ee292134.aspx 看到Microsoft 为专用分配器提供宏和类,但我不确定每种缓存策略是什么,如何使用它们。有人可以解释何时使用这些部分吗?
- 缓存模板
-
cache_freelist-cache_freelist模板类维护一个大小为Sz的内存块的空闲列表。当空闲列表已满时,它使用operator delete来释放内存块。当空闲列表为空时,它使用operator new分配新的内存块。空闲列表的最大大小由Max参数中传递的类max class确定。每个内存块包含Sz字节的可用内存以及operator new和operator delete所需的数据。 -
cache_suballoc-cache_suballoc模板类使用freelist<sizeof(Type), max_unbounded>将释放的内存块存储在一个长度无限制的空闲列表中,并在空闲列表为空时从使用operator new分配的更大块中子分配内存块。每个块包含Sz * Nelts字节的可用内存和operator new和operator delete需要的数据。分配的块永远不会被释放。 -
cache_chunklist- 该模板类使用operator new分配原始内存块,在需要时对块进行二次分配以分配内存块的存储空间;它将释放的内存块存储在每个块的单独空闲列表中,并使用operator delete在没有使用任何内存块时释放块。每个内存块包含Sz字节的可用内存和指向它所属块的指针。每个块包含Nelts内存块、三个指针、一个int 以及operator new和operator delete需要的数据。
-
我自己编写了几个分配器,但是这个文档只是......令人困惑。
【问题讨论】:
-
this 有帮助吗?例如,他们提到了 ALLOCATOR_DECL,并解释了为什么以及如何使用它。
-
我使用该页面生成问题。重读它确实解释了如何使用该宏,但没有解释其他类型。此外,解释如何使用宏的部分有误导我的错别字。他们混合了
Alloc和alloc<int> -
您是从这个页面开始的吗:msdn.microsoft.com/en-us/library/ee292134.aspx。很清楚如何使用这个分配器和宏。您的链接(从本页链接)只是普通用户不需要理解的技术细节。也许标题本身会更容易理解。您是否尝试阅读标题?
-
尚未阅读 cmets/header,没有。
-
@PiotrNycz:阅读该页面。我仍然没有得到缓存或宏,因此,底部的分配器。