轻量web服务器开发日记02-mempool内存池的实现

大家先看看内存池的相关概念:
通常我们习惯直接使用calloc、malloc等接口向系统申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。
内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是尽量避免了内存碎片,使得内存分配效率得到提升。
我实现的内存池mempool是在服务器初始化阶段想系统申请指定大小和数目的内存块(在antweb配置文件中设置),并且使用链表的方式把内存块串连起来形成内存池。该内存池中的内存块用于存放客户端的请求数据和服务器的响应数据。
(1)内存块结构体:

typedef struct mb{
    //指向内存块
    void *memptr;
    //指向下一个内存块
    struct mb *next;
}memblock;

(2)内存池结构体:

typedef struct {
    //指向节点首部
    memblock *first;
    //指向节点尾部
    memblock *last;
    //空闲的memblock数量
    int mb_num;
} mempool;

(3)创建内存块:

memblock *memblock_create(int num) 
{
    memblock *temp = NULL;
    if((temp = (memblock*)calloc(1,sizeof(memblock))) == NULL)
    {
        printf("memory is not enough...\n");
        exit(1);
    }
    int mbsize;
    //MBSIZE为内存块大小,其的值是从antweb配置文件中获取
    mbsize = MBSIZE;
    temp->memptr = calloc(mbsize,sizeof(char));
    temp->next = NULL;
    return temp;
}

(4)创建内存池:

mempool *mempool_create()
{
    mempool *used;
    memblock *
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值