【小白一图看懂Nginx内存池结构】

5 篇文章 0 订阅

小白一图看懂Nginx内存池结构

typedef struct ngx_pool_large_s  ngx_pool_large_t;
struct ngx_pool_large_s{//大数据块
    ngx_pool_large_t   *next;   //指向 下一个的大数据块
    void              *alloc;   //大数据块地址
};

typedef struct{//数据块
    u_char       *last;   //指向 待分配空间的首地址
    u_char        *end;   //指向 数据块内存空间的结束位置
    ngx_pool_t   *next;   //指向 下一个数据块首地址
    ngx_uint_t  failed;   //保存 当前数据块 申请分配空间失败次数
} ngx_pool_data_t;

struct ngx_pool_s{//首数据块
    ngx_pool_data_t        d;  //数据块 结构体
    size_t               max;  //当前数据块最大可分配的内存大小(Byte)
    ngx_pool_t      *current;  //指向 当前正在使用的内存池(当该内存池满时,将指向新申请的内存池last)
    ngx_pool_large_t  *large;  //指向 大数据块首地址(当申请内存 > 当前数据块最大分配内存时,将申请大数据块内存)
};

第1步:创建一个内存池,内存池 首数据块 结构参数:增加了 max current large三个参数。
该内存池未满时current指针 指向自已的首地址(其他参数:见代码注释)
while(第2步 !直至该内存池不足时) {
第2步:在此内存池内申请数据块,每次申请大小不超过 (首数据块max值)
2.1:申请成功:该数据块 链到首数据块的 next指针上,该数据块next指向空。再申请时一直向后链连。
2.2:申请失败:将 申请大数据块并 链到首数据块 large指针上。该大数据块next指向空。
再申请时一直向后链接。

第3步:该内存池不足时,将会申请新的内存池,此时 前任内存池的current指针 将指向新内存池首地址。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值