随笔 - 119  文章 - 290  trackbacks - 0

博客搬家了哦,请移步
叫我abc

常用链接

留言簿(12)

随笔分类

我的博客

搜索

  •  

积分与排名

  • 积分 - 299385
  • 排名 - 84

最新评论

阅读排行榜

内存池存在的意义就是效率,减少程序对系统的请求。我所知道的内存池技术有两种:
一种是PoolFactory,可以这样称呼吧,本质是一个内存分配器模板,由模板的具体类型决定分配单位的大小。也就是说一个具体的分配器只负责分配一种尺寸的内存块,通常分配器都是和程序中的类相绑定的。如代码
class  SomeClass;   PoolFactory  someClassMemPool(100);
在重载了SomeClass的new操作符后,就由someClassMemPool来分配每个该类对象的内存。
这样看似乎很帅,因为可以根据该类对象所出现的最大数量来进行预分配,而且分配算法相当的优美,单链表而已。可以局限在于,这个技术只能对用户定义类进行分配,对基本类型无能为力,对函数内的分配无能为力(这主要也是针对基本类型)。
另一种技术是全局的pool,多链表的空闲内存,从8字节开始递增,一直到128字节,有点像STL 的Alloc类。这一技术关照的范围比较齐全,可是维护内存池的代码却比较罗嗦,而且不能像PoolFactory那样预见应该分配多少数量的块给各个尺寸。

Ogre是没有内存池模块的,有的只是一个内存跟踪模块,进行泄漏检测之类的用途。

聊到这里,最后要说的是学会share现成的代码,少做重复的工作。如果是刚学习的人,自然是练习基础代码多多益善,但是对于已经有能力做组合的人,百度一下吧,这样的代码是有的,下下来看一下就用了,浪费自己的时间写一个是很没意义的。

posted on 2006-06-10 12:49 LOGOS 阅读(3860) 评论(5)  编辑 收藏 引用

FeedBack:
# re: 聊内存池技术 2006-10-15 21:25 LOGOS
一个是基于模版的分配器,另一个是基于链表池的分配器  回复  更多评论
  
# re: 聊内存池技术 2006-12-03 15:46 李锦俊
loki啊。。。现成的  回复  更多评论
  
# re: 聊内存池技术 2008-03-31 22:48 杜中伟
其实内存池就真你说的这么点东西,一些技术性东西不应该被过度神化,不过内存分配算法倒还不简单的.  回复  更多评论
  
# re: 聊内存池技术[未登录] 2008-03-31 23:58 CppExplore
没什么算法,结构决定了算法。  回复  更多评论
  
# re: 聊内存池技术 2009-07-27 10:15 李锦俊
把老帖子搬出来玩玩。Ogre1.6已经有内存管理器了,通过nedmalloc实现的。虽说分配释放内存比以前快多了,不过这家伙会导致内存越占越多。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理