nginx数据结构之ngx_list分析(nginx0.1.0)

2024-03-27 21:48

本文主要是介绍nginx数据结构之ngx_list分析(nginx0.1.0),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


/** Copyright (C) Igor Sysoev*/#ifndef _NGX_LIST_H_INCLUDED_
#define _NGX_LIST_H_INCLUDED_#include <ngx_config.h>
#include <ngx_core.h>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_s结构体ngx_list_part_t   part; // ngx_list_part_s链表的第一个节点,相当于头指针 /*  size: 每个ngx_list_part_s结构体管理的内存中,分配的粒度,即每个元素的大小nalloc: 每个ngx_list_part_s结构体可以分配几个size大小的内存,nalloc和size是ngx_list_part_s结构体的共同属性,所以放到全局*/size_t            size; ngx_uint_t        nalloc; ngx_pool_t       *pool;
} ngx_list_t;ngx_inline static ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t *pool,ngx_uint_t n, size_t size)
{   // 分配第一个ngx_list_part_t节点if (!(list->part.elts = ngx_palloc(pool, n * size))) {return NGX_ERROR;}// 初始化使用个数为0,list->part.nelts = 0;list->part.next = NULL;// 指向当前可分配内存的节点list->last = &list->part;// 粒度list->size = size;// 每个ngx_list_part_t结构体可分配的块个数list->nalloc = n;list->pool = pool;return NGX_OK;
}/***  the iteration through the list:**  part = &list.part;*  data = part->elts;**  for (i = 0 ;; i++) {**      if (i >= part->nelts) {*          if (part->next == NULL) {*              break;*          }**          part = part->next;*          data = part->elts;*          i = 0;*      }**      ...  data[i] ...**  }*/void *ngx_list_push(ngx_list_t *list);#endif /* _NGX_LIST_H_INCLUDED_ *//** Copyright (C) Igor Sysoev*/#include <ngx_config.h>
#include <ngx_core.h>void *ngx_list_push(ngx_list_t *l)
{void             *elt;ngx_list_part_t  *last;// 指向当前可用的节点last = l->last;// 已使用的个数等于最多能使用的个数,说明已经没有可使用的空间,再分配一个ngx_list_part_tif (last->nelts == l->nalloc) {/* the last part is full, allocate a new list part */// 分配一个新的节点if (!(last = ngx_palloc(l->pool, sizeof(ngx_list_part_t)))) {return NULL;}// 给上面新分配的节点申请固定大小的内存,供他管理if (!(last->elts = ngx_palloc(l->pool, l->nalloc * l->size))) {return NULL;}// 当前新分配的节点已使用块数为0last->nelts = 0;last->next = NULL;// 链成链表,第一个ngx_list_part_t节点充当头指针,可以通过ngx_list_t->part访问l->last->next = last;// 指向当前可使用的ngx_list_part_t节点l->last = last;}// 当前可分配内存的块首地址加上已经使用的内存,即下一个可用块的首地址elt = (char *) last->elts + l->size * last->nelts;// 当前节点已分配内存块数加1last->nelts++;// 返回可使用的内存首地址,在该函数外写入数据return elt;
}

在这里插入图片描述

这篇关于nginx数据结构之ngx_list分析(nginx0.1.0)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/853490

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2