背景
- 目的是分析nginx的内存池模块,了解内存池相关知识
- nginx为什么要这样设计内存池
基本数据结构介绍
- ngx_pool_s:nginx的内存池结构,定义如下
1
2
3
4
5
6
7
8
9
10
11
12
13struct ngx_pool_s {
//d:保存可用内存地址信息
ngx_pool_data_t d;
//max:申请大块的的基本条件是申请大小超过max
size_t max;
//current:指向当前内存池结构,初始化时候指向它自己
ngx_pool_t *current;
ngx_chain_t *chain;
//large:表示大块内存,通过单向链表表示
ngx_pool_large_t *large;
ngx_pool_cleanup_t *cleanup;
ngx_log_t *log;
}; - ngx_pool_data_t:存储内存小于(4k-1)的内存块,其结构定义如下
1 | typedef struct { |
- ngx_pool_large_s:存储内存超过(4k-1)字节的内存块,其结构定义如下
1 | struct ngx_pool_large_s { |
基本函数介绍
- ngx_create_pool:nginx的内存池创建
- ngx_destroy_pool:销毁一个内存池
- ngx_reset_pool:重置一个内存池中的小块内存,同时释放大块内存
- ngx_palloc:通过系统调用函数申请内存
- ngx_pnalloc:从内存池中申请内存
- ngx_pmemalign:按照对齐方式方式申请large结构体内存
- ngx_pfree:释放大块内存