用ace写的slab内存池
在大并发中或系统要产生许多小对象时,可能会考虑要用内存池。我们或许会用ACE_Dynamic_Cached_Allocator、ACE_Static_Allocator做内存池,但它们有固定大小的限制。或许也可以定义如下的内存池:typedef ACE_Malloc<ACE_MMAP_MEMORY_POOL, ACE_SYNCH_MUTEX> MMAP_Malloc;
typedef ACE_Allocator_Adapter<MMAP_Malloc> MMAP_Malloc_Allocator;
typedef ACE_Singleton<MMAP_Malloc_Allocator, ACE_SYNCH_MUTEX> MMAP_Malloc_Allocator_Singleton;
#define MMAP_ALLOCATOR MMAP_Malloc_Allocator_Singleton::instance()
但,mmap的内存池是有上限的,具体多少测一下就知道了。当然有些人也写了一些在网上发布,但都觉得都不是很合意。虽然本人极喜欢用ACE开发,但也要说内存池方面ACE做得不够。有缺陷不要紧,实现一个能适应实际的开发环境的内存池就是了。我用ACE根据glib中的内存池模仿改造实现了Slab_Allocator,它符合ACE的Allocator接口。Glib的内存池的就是slab内存池原理的实现,http://blog.csdn.net/sanlongcai/archive/2007/08/11/1738286.aspx和http://blog.csdn.net/sanlongcai/archive/2007/08/04/1725853.aspx对glib实现的内存池有很好解说。这里实现的跟glib的有一点区别:分配比较大的内存块时另行处理。
文件无法上传,是因为附件太大了。我已经进行了处理。 请问各位老手,为什么我上传的源码附件没有在这里显示 可能是权限的问题吧?新注册用户权限受限。你把主要代码贴上来就可以了,不要用附件的形式。 多发点号帖子把 可能是权限的问题吧?新注册用户权限受限。你把主要代码贴上来就可以了,不要用附件的形式。 ...
winston 发表于 2011-2-28 09:07 http://www.acejoy.com/bbs/images/common/back.gif
看版主的签名档,看的书也就那么5-6本吧?
还有没有好书推荐? 回复 5# huzia
ACE系统虽然大,但框架就那么多,书也就那么几本而已。主要是要求的各方面基础要好,否则理解、使用都困难重重。
代码已由管理员上传,删除了贴出来的代码
本帖最后由 laocai 于 2011-3-4 21:21 编辑!!代码已由管理员上传,删除了贴出来的代码
代码已由管理员上传,删除了贴出来的代码
本帖最后由 laocai 于 2011-3-4 21:20 编辑!!代码已由管理员上传,删除了贴出来的代码
代码已由管理员上传,删除了贴出来的代码
本帖最后由 laocai 于 2011-3-4 21:20 编辑!!代码已由管理员上传,删除了贴出来的代码 本帖最后由 laocai 于 2011-3-4 21:22 编辑
这些代码在32位、64位windows,32位、64位linux都测试过
页:
[1]
2