一、由问题产生的思考
游戏服务器要求的是稳定,高并发和客户端请求的快速响应,但new和delete的次数增加将增加运行时间,降低服务器的运行效率,增加内存碎片,过激的情况下,还将导致服务器内存耗尽。同时,new和delete用得不恰当还将导致内存泄露。
二、使用对象池的好处
为了解决以上提出的问题,最好的解决方法就是对象池。
1.使用对象池可以减少从头创建对象的系统开销,减少new,delete次数,减少运行时间,从而提高运行效率。
2.减少new,delete次数过多产生的内存碎片。
3.内存统一管理,避免内存泄露。当需要使用对象时,向对象池中申请,不用的时候,归还到对象池中,一次new,重复利用。
三、具体实现
设计构思:
1.一个对象池包含:
pUseBlockList(可用内存块列表)
pDisBlockList(不可用内存块列表)
2.一个内存块包含:
UnitCount(保存一个内存块一共有多少个内存单元)
First(保存一个内存块下一个要被分配的内存单元的序号)
pBlock(保存一个内存块的头指针)
pPrevBlock(指向上一内存块指针)
pNextBlock(指向下一内存块指针)
pFreeUnitList(空闲内存单元列表)
3.一个内存单元包含:
pNextUnit(保存下一内存单元指针)
pMemoryBlock(该内存单元属于哪一个内存块指针)
T(对象数据)
四、效果展示与源码
通过以上一个不是很科学测试结果显示,一千万个对象,使用对象池的运行效率比普通new和delete对象提高了50%以上,从而达到了提高运行效率和减少内存碎片的作用。
源码链接:点击打开链接