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开发从入门到精通