源码在此
初窥Nginx内存池
Nginx
的内存池采用链表结构,每个内存池存在三个链表,每个链表以及所对应的node
结构体如下所示
- 内存池链表 :
ngx_pool_t
- 大块内存链表 :
ngx_pool_large_t
- 需特殊回收的已分配内存链表 :
ngx_pool_large_t
节点的具体结构如下
数据结构
1 | typedef struct ngx_pool_s ngx_pool_t; |
宏
1 | //file : src/core/ngx_palloc.h |
NGX_MAX_ALLOC_FROM_POOL
: 一次的最大分配量,定义是ngx_pagesize-1
,而ngx_pagesize=getpagesize()
,也就是系统页的大小NGX_DEFAULT_POOL_SIZE
: 内存池的大小,被定义为16kb
NGX_POOL_ALIGNMENT
:对齐量为16NGX_MIN_POOL_SIZE
API
创建内存池
1 | ngx_pool_t * |
销毁内存池
1 | void |
重置内存池
1 | void |
分配内存
1 | void * |
1 | //需要的内存小于Max |
1 | //需要的内存大于Max |