本博客(http://blog.csdn.net/livelylittlefish )贴出作者(阿波)相关研究、学习内容所做的笔记,欢迎广大朋友指正!
Content
1.链表结构
1.2 ngx_list_t的逻辑结构
2.1创建链表
3.一个例子
3.2如何编译
4.小结
0. 序
本文继续介绍nginx的容器——链表。
链表实现文件:文件:./src/core/ngx_list.h/.c。.表示nginx-1.0.4代码目录,本文为/usr/src/nginx-1.0.4。
1. 链表结构
1.1 ngx_list_t结构
nginx的链表(头)结构为ngx_list_t,链表节点结构为ngx_list_part_t,定义如下。
typedef struct ngx_list_part_s ngx_list_part_t;
struct ngx_list_part_s { //链表节点结构
void *elts; //指向该节点实际的数据区(该数据区中可以存放nalloc个大小为size的元素)
ngx_uint_t nelts; //实际存放的元素个数
ngx_list_part_t *next; //指向下一个节点
};
typedef struct{ //链表头结构
ngx_list_part_t *last; //指向链表最后一个节点(part)
ngx_list_part_t part; //链表头中包含的第一个节点(part)
size_t size; //每个元素大小
ngx_uint_t nalloc; //链表所含空间个数,即实际分配的小空间的个数
ngx_pool_t *pool; //该链表节点空间在此内存池中分配
}ngx_list_t;
其中,sizeof(ngx_list_t)=28,sizeof(ngx_list_part_t)=12。
由此可见,nginx的链表也要从内存池中分配。对于每一个节点(list part)将分配nalloc个大小为size的小空间,实际分配的大小为(nalloc * size)。详见下文的分析。
<