一、nginx封装的数据结构
1、有符号和无符号数:
typedef intptr_t ngx_int_t;
typedef uintptr_t ngx_uint_t;
2、字符串类型:
typedef struct {
size_t len;
u_char *data;
}
字符串并不以'\0'结尾,不能当做普通字符串来对待,当做普通字符串会导致内存泄露。
3、链表ngx_list_t:
typedef struct ngx_list_part_s ngx_list_part_t;
struct ngx_list_part_s { //代表链表的单个元素
void* elts;//指向数组的起始地址
ngx_uint_t nelts;//表示数组中已经存储了多少个元素
ngx_list_part_t* next;//下一个链表元素的地址
};
typedef struct {
ngx_list_part_t* last;//最后一个数组元素
ngx_list_part_t part;//首个数组元素
size_t size;//限制每个数组元素的大小
ngx_uint_t nalloc;//每个ngx_list_part_t数组最多可以存储多少个数据
ngx_pool_t* pool;//链表管理内存分配的内存池对象
}ngx_list_t;
二、nginx链表
ngx_list_t中数据都是由ngx_pool_t类型的内存池分配的,他们通常都是连续的内存。
ngx_list_t* ngx_list_create(ngx_pool_t* pool, ngx_uint_t n, size_t size);//用于创建一个链表
ngx_list_init(ngx_list_t* list, ngx_pool_t* pool, ngx_uint_t n, size_t size);//用于初始化一个已有链表
void* ngx_list_push(ngx_list_t *list);//用于向链表中添加新元素