Nginx学习笔记(二十):内存池分析

本文详细介绍了Nginx的内存池概念,包括如何创建内存池、在内存池中进行分配、重置以及释放内存的操作,是理解Nginx内存管理机制的重要学习笔记。
摘要由CSDN通过智能技术生成

前言

Nginx事件模块中在分配存储配置项参数的结构体时需要从内存池中分配内存,然后看代码的时候觉得这一块可以好好研究下。网上一搜果然是有大量的文章,所以就学习笔记下。这里推荐阿里数据平台的博文《Nginx源码分析-内存池》

Nginx内存池的设计也是蛮漂亮的,大块内存以及小块内存都有考虑到,这里很需要学习其思想,以后非常有可能会用到。

内存池创建

对于内存池的结构,我们可以暂且将其分为头部以及数据域两部分,代码如下:
<span style="font-family:SimSun;font-size:18px;">struct ngx_pool_s {
    ngx_pool_data_t       d;        // 数据域部分,小块内存在此分配
    size_t                max;      // 整个数据块的大小,亦即能够分配的小块内存最大值
    ngx_pool_t           *current;  // 指向当前内存池
    ngx_chain_t          *chain;    // 可以挂载一个chain结构
    ngx_pool_large_t     *large;    // 当分配的内存超过max值时,即分配大块内存时,使用该成员,属于数据域部分
    ngx_pool_cleanup_t   *cleanup;  // 当内存池释放的时候,同时需要释放的一些资源使用该成员
    ngx_log_t            *log;      // 日志
};

typedef struct {
    u_char               *last;     // 当前内存分配结束位置,亦即下一段内存分配开始位置
    u_char               *end;      // 内存池结束位置
    ngx_pool_t           *next;     // 链接下一个内存池
    ngx_uint_t            failed;   // 该数据域部分不能满足分配内存的次数
} ngx_pool_data_t;</span>
内存池创建的代码如下:
<span style="font-family:SimSun;font-size:18px;">ngx_pool_t *
ngx_create_pool(size_t size, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值