ngx_list_t

Nginx的list数据结构与我们常见的链表实现的数据结构还是有一些不同的:它的节点不像我们常见的list的节点,只能存放一个元素,ngx_list_t的节点实际上是一个固定大小的数组

在初始化的时候,我们需要设定元素需要占用的空间大小,每个节点数组的容量大小。
在添加元素到这个list里面的时候,会在最尾部的节点里的数组上添加元素,如果这个节点的数组存满了,就再增加一个新的节点到这个list里面去。

typedef struct
{
   
	ngx_list_part_t		*last;		//指向链表的最后一个节点
	ngx_list_part_t		part;		//该链表的首个存放具体元素的节点
	size_t				size;		//链表中存放的具体元素所需内存大小
	ngx_uint_t			nalloc;		//每个节点所含的固定大小的数组的容量
	ngx_pool_t			*pool;		//该list所使用的池
}

相关操作API

ngx_list_t *ngx_list_create(ngx_pool_t* pool, ngx_uint_t n, size_t size);
/*创建一个ngx_list_t对象,并对该list的第一个节点分配存放元素的内存空间 * pool 分配内存使用的pool * n 每个节点固定长度的数组的长度 * size 存放的具体元素的个数 */
void* ngx_list_push(ngx_list_t* list);
//给定在给定的list的尾部追加一个元素,并返回指向新元素存放空间的指针
static ngx_inline ngx_int_t ngx_list_init(ngx_list_t* list, ngx_pool_t* pool, ngx_uint_t n, size_t size);
//给未分配空间的list的首节点分配空间

参考文献

[1] Nginx开发从入门到精通