Nginx-ngx_list
来源:互联网 发布:河南省大数据谷是哪里 编辑:程序博客网 时间:2024/06/05 06:17
ngx_list是nginx中对链表的一个数据结构封装,起功能和普通的连接打通小异。先看看结构体定义
typedef struct ngx_list_part_s ngx_list_part_t;struct ngx_list_part_s { void *elts; //数据区空间的指针 ngx_uint_t nelts; //链表块中元素的个数 ngx_list_part_t *next; //下一个链表块的节点};typedef struct { ngx_list_part_t *last; //指向最后一个链表块的指针 ngx_list_part_t part; //链表第一块的指针 size_t size; //链表中每个元素的空间大小 ngx_uint_t nalloc; //链表中容量大小,指的是最大能容下多少个元素 ngx_pool_t *pool; //当前链表分配空间的内存池} ngx_list_t;从这两个结构体定义来看还是挺有意思的, 从这个链表的定义中可以看出,一个链表实际上是有多个子链表构成。然后看看提供了一些什么样的接口吧。
ngx_list_t *ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size){ ngx_list_t *list; //list结构体本身申请空间 list = ngx_palloc(pool, sizeof(ngx_list_t)); if (list == NULL) { return NULL; } //为list中数据区申请空间 list->part.elts = ngx_palloc(pool, n * size); if (list->part.elts == NULL) { return NULL; } list->part.nelts = 0; //初始化链表中的元素个数,一开始没有,所以是0 list->part.next = NULL; //下一个区块的指针 list->last = &list->part; //最后一个区块指针 list->size = size; //链表中单个元素的大小 list->nalloc = n; //当前表块中最大能容纳的元素个数 list->pool = pool; //链表所在的内存池 return list;}list创建函数,和ngx_array的函数功能类似。
void *ngx_list_push(ngx_list_t *l){ void *elt; ngx_list_part_t *last; last = l->last; if (last->nelts == l->nalloc) { /* the last part is full, allocate a new list part */ last = ngx_palloc(l->pool, sizeof(ngx_list_part_t)); if (last == NULL) { return NULL; } last->elts = ngx_palloc(l->pool, l->nalloc * l->size); if (last->elts == NULL) { return NULL; } last->nelts = 0; last->next = NULL; l->last->next = last; l->last = last; } elt = (char *) last->elts + l->size * last->nelts; //返回数据要存放的位置的起始地址 last->nelts++; return elt;}
这个函数提供了将一个元素加入链表的结构,这个函数返回的是数据存放的其实地址,实际数据存放操作需要在链表外面完成。
- Nginx-ngx_list
- nginx数据结构-ngx_list
- Nginx源码完全注释(3)ngx_list.h / ngx_list.c
- ngx_list
- nginx链表代码分析[ngx_list.c]
- nginx ngx_list 定长数据块的分配链表
- nginx 源码学习笔记(十一)——基本容器——ngx_list
- nginx 源码学习笔记(十一)——基本容器——ngx_list
- Nginx源码分析 - 基础数据结构篇 - 单向链表结构 ngx_list.c
- nginx源码初读(6)--让烦恼从数据结构开始(ngx_list)
- list链表分析(一)ngx_list
- nginx
- Nginx
- Nginx
- Nginx
- Nginx
- nginx
- nginx
- CF 294E Shaass the Great【Tree】
- 黑马程序员——基本数据类型对象包装类
- qDebug调试基本应用
- 自动化测试管理平台ATMS(V2.0.2_8.19)下载
- linux内存管理浅析
- Nginx-ngx_list
- ORA-01113: file 8 needs media recovery【数据文件的OFFLINE操作造成】
- NYOJ 题目119 士兵杀敌(三)(线段树,区间最值)
- CSS实例(六):实现网页固定大小三态图形按钮简单方法
- 三周C# 总结4 函数
- Java集合类详解
- hibernate hbm.xml 配置文件中的主键生成策略
- winsocket 之收发数据出问题
- JS微信打飞机游戏(四)