ScopeAlloc
概览
AutoFreeAlloc有较强的局限性,仅仅适用于有限的场合(局部的复杂算法);而ScopeAlloc是通用型的Allocator,基本在任何情况下,你都可通过使用ScopeAlloc来进行内存管理,以获得良好的性能回报。
理解ScopeAlloc的关键,在于理解我们对AutoFreeAlloc的模型所作的修正。详情参考《C++内存管理变革(6):通用型垃圾回收器 - ScopeAlloc》。
规格
typedef BlockPoolT<SingleThreadModel> BlockPoolST; typedef ProxyAlloc<BlockPoolST> ProxyBlockPoolST; typedef BlockPoolT<MultiThreadModel> BlockPoolMT; typedef ProxyAlloc<BlockPoolMT> ProxyBlockPoolMT; class ProxyST : public StdAlloc { public: typedef ProxyBlockPoolST allocator_type; }; class ProxyMT : public StdAlloc { public: typedef ProxyBlockPoolMT allocator_type; }; typedef AutoFreeAllocT<ProxyST> ScopeAllocST; typedef AutoFreeAllocT<ProxyMT> ScopeAllocMT; #if defined(_MT) typedef BlockPoolMT BlockPool; typedef ProxyBlockPoolMT ProxyBlockPool; typedef ScopeAllocMT ScopeAlloc; #else typedef BlockPoolST BlockPool; typedef ProxyBlockPoolST ProxyBlockPool; typedef ScopeAllocST ScopeAlloc; #endif
BlockPool
- BlockPool是一个Allocator。其实现就是通常我们所说的内存池(Memory Pool)。但是它比一般的内存池要简单很多,因为它只是管理MemBlock,而不负责对MemBlock进行结点(Node)1的划分(这个工作实际上由AutoFreeAllocT完成了)。
- 由于ThreadModel的不同,BlockPool又分为BlockPoolST(单线程)、BlockPoolMT(多线程)。详情参考BlockPool。
ProxyAlloc
- Allocator代理。在介绍AutoFreeAlloc时我们说过,传递给AutoFreeAllocT的Allocator,通常要么是一个全局内存Allocator,要么是一个Allocator代理。ScopeAlloc使用后者。
- 关于该类细节,详情参考ProxyAlloc。
AutoFreeAllocT
- 真正实现ScopeAlloc内存管理的类。从这个意义上来说,ScopeAlloc只是另一个“AutoFreeAlloc”。
- 关于AutoFreeAllocT,请参阅AutoFreeAlloc。实现细节请参考《C++内存管理变革(2):最袖珍的垃圾回收器 - AutoFreeAlloc》。
相关应用
相关参考
- AutoFreeAlloc (GC Allocator)
- BlockPool, ProxyAlloc
- ThreadModel
- STD_NEW, STD_NEW_ARRAY
- STD_ALLOC, STD_ALLOC_ARRAY
- STD_NO_DESTRUCTOR
使用样例
(todo)
page revision: 7, last edited: 05 Apr 2008 14:02