内存池存在的意义就是效率,减少程序对系统的请求。我所知道的内存池技术有两种:
一种是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 阅读(3880)
评论(5) 编辑 收藏 引用