ACE内存池管理器积累

源起

近来由于研究ACE内存分配的组件,想做一个应用程序级的内存管理,有人还想自己写一个,我觉得可以直接用ACE自己提供的内存管理器,避免重复发明轮子。

结合以前认识,和前辈们的积累,觉得可以记下来一些知识!

ACE Allocator体系

ACE内存池管理器积累_第1张图片

ACE_Stattic_Allocator

此静态内存分配器定内存大小,内部remove接口为空实现,所以,分配器的内存在程序退出时依然可以保留,能够起到类似静态内存的效果。

此内存分配器体现为连续一整块内存,将会具有访问速度上的优势,以及可以避免内存碎片!

注意此类不具有锁策略,建议在线程安全的情况下使用,例如,利用线程变量或加锁

此类可以分配在静态内存区域,或堆上
在只申请内存、不释放内存,但是总量有限的场合将非常适用

ACE_Cached_Allocator和ACE_Dynamic_Cachee_Allocator

两个类都是定内存大小和定分配个数的内存管理池,它俩最大的区别就在于分配是具有字节概念,还是具有某个简单类型概念,分别可以提供内存池或简单对象池的服务。

考虑到内存池都不会设定无限大小,所以,这种内存池也非常有其使用的场合

具有可扩展的锁策略
对象归还分配器时,如果存在某些特殊的资源,需要释放,则依赖调用方主动编码

ACE_Allocator_Adapter< MALLOC >

此类可以整合变长、个数不定的内存池管理器ACE_Malloc成为Allocator分配器

ACE_Malloc和Allocator的重大区别

  • Allocator
    • Allocator两个Cached类基于定大小、定个数的内存池管理
    • 其中静态分配器值得注意,在某些只申请不释放的场景,将连续内存具有访问优势
  • ACE_Malloc提供了更丰富的、面向字节的内存池管理,内存池可以变长、变个数,分配时在池中寻找最佳匹配,不足时进行立即分配
    • ACE_Allocator_Adapter将变长内存池管理器MALLOC包装成Allocator
    • 其他*Memory_Pool组件,可以将ACE_Malloc的内存池管理扩展到更宽的面

对ACE基于模板开发的新认识

  • 一个组件仅解决一个小问题,通过组合方式,或浅层次继承实现扩展
  • 更多使用模式,以及模板的弱类型限制能力,实现代码的自动生成、扩展

ACE在基类使用虚析构函数反而用的并不多,后面有空探究下它这方面的设计哲学

参考

man ACE Allocator

你可能感兴趣的:(ACE,c&c++技术,ACE,内存管理器)