time 
设为首页】【收藏本站
当前位置: 主页 > 程序设计 > C\C++\VC > C语言 > 改进的相对完善的c内存池

改进的相对完善的c内存池

时间:2009-09-20 23:04 点击:4162次 字体:[ ]




/**
*本程序为内存池解决方案
*程序设计中兼顾了小内存碎片中等内寻管理以及大块内存
*设计中参阅了网络的部分内存池设计原理,取其精华,本程序池对象分为三个部分,(0-InitMemPool)*Align(4,8,16等等)大小
*范围内的内存申请在池链表的同时又一个池指针索引指向池,比如,设置InitMemPool为256,就会有256个被提前初始化,索引依次
*为1、2、3、...256,对应管理的内存片大小为1*Align、2*Align、3*Align.....256*Align,其中Align为基本对齐单位,默认为4,如果申
*请的内存比较大可以设置为8,前256(InitMemPool)个会索引指针,通过下标就能引用,大于此范围的内存在InitMemPool链表之后
*紧密附加在后面,不会产生空档,提起需要便利后面部分方能得到,当申请的内存大于255*255*Align的时候就超出了本内存池的管理范围
*一般来讲即使最小设置Align为4也可以达到260K的最大内存管理,如果不够用可以加大Align,再大了管理起来也就没意思了,内存管理的
*每块内存前面保留2个字符的unsigned short int类型的大小数据,用来保存数据块大小,方便free的时候使用
*本程序经过车是性能已经超过我所参考的大部分程序池,安全方面暂时没有加入线程锁,接下来的改进可能将锁保存在池链表中,对单项进行加锁
*/

memory.c

#include "memory.h"

static MemPool * heap=NULL;//分界线
static MemPool * top_of_heap=NULL;//池集合的头部
static MemPool * btm_of_heap=NULL;//池集合的尾部
int index=1;
MemPool * poolIndex[InitMemPool];
static long totalByte;
static Int AlignNum(Int size)
{
return (((size)+Align-1) &~ (Align-1));// 按Align对齐字节对齐
}
/**
*取会给定结构的池结构体
*/
MemPool * GetPool(unsigned int name)
{
   MemPool * p=poolIndex[InitMemPool-1];
   while(p->next!=heap->next)
   {
    if(p->name==name)
    {
     return p;
    }
    else
     p=p->next;
   }
return NULL;
}

 



本文地址 : http://www.fengfly.com/plus/view-76891-1.html
标签:
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: