找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 9814|回复: 15

用ace写的slab内存池

  [复制链接]
发表于 2011-2-27 20:19:02 | 显示全部楼层 |阅读模式
在大并发中或系统要产生许多小对象时,可能会考虑要用内存池。我们或许会用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.aspxhttp://blog.csdn.net/sanlongcai/archive/2007/08/04/1725853.aspx对glib实现的内存池有很好解说。这里实现的跟glib的有一点区别:分配比较大的内存块时另行处理。


文件无法上传,是因为附件太大了。我已经进行了处理。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?用户注册

×
 楼主| 发表于 2011-2-27 20:33:43 | 显示全部楼层
请问各位老手,为什么我上传的源码附件没有在这里显示
发表于 2011-2-28 09:07:49 | 显示全部楼层
可能是权限的问题吧?新注册用户权限受限。你把主要代码贴上来就可以了,不要用附件的形式。
发表于 2011-2-28 09:15:48 | 显示全部楼层
多发点号帖子把
发表于 2011-2-28 12:01:30 | 显示全部楼层
可能是权限的问题吧?新注册用户权限受限。你把主要代码贴上来就可以了,不要用附件的形式。 ...
winston 发表于 2011-2-28 09:07


看版主的签名档,看的书也就那么5-6本吧?

还有没有好书推荐?
发表于 2011-2-28 12:10:28 | 显示全部楼层
回复 5# huzia


    ACE系统虽然大,但框架就那么多,书也就那么几本而已。主要是要求的各方面基础要好,否则理解、使用都困难重重。
 楼主| 发表于 2011-2-28 19:55:48 | 显示全部楼层

代码已由管理员上传,删除了贴出来的代码

本帖最后由 laocai 于 2011-3-4 21:21 编辑

!!代码已由管理员上传,删除了贴出来的代码
 楼主| 发表于 2011-2-28 19:57:46 | 显示全部楼层

代码已由管理员上传,删除了贴出来的代码

本帖最后由 laocai 于 2011-3-4 21:20 编辑

!!代码已由管理员上传,删除了贴出来的代码
 楼主| 发表于 2011-2-28 20:02:39 | 显示全部楼层

代码已由管理员上传,删除了贴出来的代码

本帖最后由 laocai 于 2011-3-4 21:20 编辑

!!代码已由管理员上传,删除了贴出来的代码
 楼主| 发表于 2011-2-28 20:06:15 | 显示全部楼层
本帖最后由 laocai 于 2011-3-4 21:22 编辑

这些代码在32位、64位windows,32位、64位linux都测试过
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-5-6 13:37 , Processed in 0.037602 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表