[nginx] 内存池与基本容器

nginx内存池:ngx_pool_t,二级内存分配器

nginx基本容器,包括:

一、nginx内存池

参考nginx源码分析—内存池结构ngx_pool_t及内存管理,特点:

  • 与STL的空间配置器类似,有两级配置,仅提供了释放大内存块的接口,小内存只分配不释放,要么释放整个内存池(nginx进程中有茫茫多内存池)
  • 内存池由三部分组成:小块内存形成的链表(并不是ngx_list_t)、大块内存形成的链表、以及挂载了一些内存池释放同时释放的资源(到底是啥,待补充)
  • 其中小块内存链表每个格子大小相同,剩余空间不足时再申请格子挂在该链表里,这里有个特别的点:每个当前格子有个失败计数器,在给调用方分配内存时只有当计数器>4后再调整当前格子为下一个格子,目的是当前格子虽然不满足分配需求,但也有剩余,可能满足下一次分配

ngx_pool_t


二、ngx_array_t

nginx中的数组容器,参考nginx源码分析—数组结构ngx_array_t,应用非常广泛

// 动态数组
struct ngx_array_s {
    // elts指向数组的首地址
    void        *elts; 
    // nelts是数组中已经使用的元素个数
    ngx_uint_t   nelts; 
    // 每个数组元素占用的内存大小
    size_t       size;  
    // 当前数组中能够容纳元素个数的总大小
    ngx_uint_t   nalloc; 
    // 内存池对象
    ngx_pool_t  *pool;  
};

ngx_array_push(ngx_array_t *a)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值