源码在此
初窥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:对齐量为16
- NGX_MIN_POOL_SIZE
API
创建内存池
| 1 | ngx_pool_t * | 
销毁内存池
| 1 | void | 
重置内存池
| 1 | void | 
分配内存
| 1 | void * | 
| 1 | //需要的内存小于Max | 
| 1 | //需要的内存大于Max |