概述
单链表是一个较为简单的数据结构,对插入、删除节点具有较高的灵活性
nginx对该数据结构进行了一层封装
单链表结构
//Nginx 链表结构(以数组为节点)
typedef struct {
ngx_list_part_t * last; //最后一个节点
ngx_list_part_t* part; //首个节点
size_t size; //每个节点占内存大小
ngx_uint_t nalloc; //每个节点中数组的容量
ngx_pool_t * pool; //为链表分配的内存池
}ngx_list_t
//链表节点
struct ngx_list_part_s {
void *elts; //节点数组
ngx_uint_t nelts; // 节点元素个数
ngx_list_part_t *next ; //下一节点
}
为了弥补单链表结构的两个不足:
1
.频繁的内存开辟与占用
2.不适合随即访问
因此,nginx单链表结构的每个节点都存储了一个数组
这样不仅克服了以上两个不足,还可以统一管理内存
单链表操作函数
函数 操作
ngx_list_create 链表创建
ngx_list_init 链表初始化(ngx_list_create调用)
ngx_list_push 在单链表尾部添加
这样不仅克服了以上两个不足,还可以统一管理内存
单链表操作函数
函数 操作
ngx_list_create 链表创建
ngx_list_init 链表初始化(ngx_list_create调用)
ngx_list_push 在单链表尾部添加
链表创建
nginx链表创建过程和数组创建过程非常类似
ngx_list_create这个函数首先为整个链表结构在内存池分配了空间,然后调用ngx_list_init创建并初始化了首个节点
这样不仅克服了以上两个不足,还可以统一管理内存
单链表操作函数
函数 操作
ngx_list_create 链表创建
ngx_list_init 链表初始化(ngx_list_create调用)
ngx_list_push 在单链表尾部添加