Nginx基本数据结构(三)——ngx_list_t

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开发从入门到精通
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shenmingik

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值