理解 Nginx 源码之五链表结构 ngx

Nginx 链表结构 ngx_list_t


链表结构

ngx_list_t 是 Nginx 封装的链表容器,链表容器内存分配是基于内存池进行的,操作方便,效率高。Nginx 链表容器和普通链表类似,均有链表表头和链表节点,通过节点指针组成链表。其结构定义如下:

理解 Nginx 源码之五链表结构 ngx_list_t

链表数据结构如下图所示:

理解 Nginx 源码之五链表结构 ngx_list_t

链表操作

Nginx 链表的操作只有两个:创建链表 和 添加元素。由于链表的内存分配是基于内存池,所有内存的销毁由内存池进行,即链表没有销毁操作。

创建链表

创建新的链表时,首先分配链表表头,再对该链表进行初始化,在初始化过程中分配头节点数据区内存。

理解 Nginx 源码之五链表结构 ngx_list_t

添加元素

添加元素到链表时,都是从最后一个节点开始,首先判断最后一个节点的数据区是否由内存存放新增加的元素,若足以存储该新元素,则返回存储新元素内存的位置,若没有足够的内存存储新增加的元素,则分配一个新的节点,再把该新的节点连接到现有链表中,并返回存储新元素内存的位置。注意:添加的元素可以是整数,也可以是一个结构。

理解 Nginx 源码之五链表结构 ngx_list_t

测试程序:

理解 Nginx 源码之五链表结构 ngx_list_t

mian函数

理解 Nginx 源码之五链表结构 ngx_list_t

输出结果:

理解 Nginx 源码之五链表结构 ngx_list_t

《深入理解 Nginx 》

《nginx源码分析—链表结构ngx_list_t》


分享到:


相關文章: