一种固定内存池的实现(含代码)

 所谓内存池,是指,应用程序可以通过系统的内存分配调用预先一次性申请适当大小的内存作为一个内存池,之后应用程序自己对内存的分配和释放则可以通过这个内存池来完成。只有当内存池大小需要动态扩展时,才需要再调用系统的内存分配函数,其他时间对内存的一切操作都在应用程序的掌控之中。

应用程序自定义的内存池根据不同的适用场景又有不同的类型。

从线程安全的角度来分,内存池可以分为单线程内存池和多线程内存池。单线程内存池整个生命周期只被一个线程使用,因而不需要考虑互斥访问的问题;多线程内存池有可能被多个线程共享,因此则需要在每次分配和释放内存时加锁。相对而言,单线程内存池性能更高,而多线程内存池适用范围更广。

从内存池可分配内存单元大小来分,可以分为固定内存池和可变内存池。所谓固定内存池是指应用程序每次从内存池中分配出来的内存单元大小事先已经确定,是固定不变的;而可变内存池则每次分配的内存单元大小可以按需变化,应用范围更广,而性能比固定内存池要低。

 

具体的介绍可见IBM这篇文章:

http://www.ibm.com/developerworks/cn/linux/l-cn-ppp/index6.html?ca=drs-cn

 

前段时间有空余,就写了段基本的内存池实现,暂不支持多线程,且是固定内存池。

 

大家想参考这片文章来实现的,可以看看我这里的代码。

 

ps:很感谢小赖帮我调试出了内存回收的bug,有的时候写一段代码只要1,2小时,但是找bug可能真的得1天。

 

memory_pool.h

 

#ifndef MEMORY_POOL_H
#define MEMORY_POOL_H

/***********************************
* author:hairetzhang                *
* date:2009.9.1                     *
* funtion: regular memory pool lib  *
* version 1.0                       *
*                                   *
************************************/


#include <iostream>
#include <malloc.h>

using namespace std;

#define  USHORT unsigned short
#define  ULONG  unsigned long
#define ADATAUNIT  2
#define MEMPOOL_ALIGNMENT 4                                        //机器的字节对齐数



struct MemoryBlock
  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值