【nginx的数据结构3——扩展红黑树】教程文章相关的互联网学习教程文章

菜鸟nginx源码剖析数据结构篇(五) 基数树 ngx_radix_tree_t[转]【代码】【图】

菜鸟nginx源码剖析数据结构篇(五) 基数树 ngx_radix_tree_t Author:Echo Chen(陈斌)Email:chenb19870707@gmail.comBlog:Blog.csdn.net/chen19870707Date:October 28h, 2014 1.什么是基数树基数树(radix tree)是一种不怎么常见的数据结构,这里简单的做一下介绍:在计算机科学中,基数树,是一种基于trie(字典树)的特殊的数据结构,可以快速定位叶子结点。radix tree是一种多叉搜索树,每个结点有固定的孩子数(叉数 为2^...

菜鸟nginx源码剖析数据结构篇(九) 内存池ngx_pool_t【代码】【图】

菜鸟nginx源码剖析数据结构篇(九) 内存池ngx_pool_t Author:Echo Chen(陈斌)Email:chenb19870707@gmail.comBlog:Blog.csdn.net/chen19870707Date:Nov 11th, 2014今天是一年一度的光棍节,还没有女朋友的程序猿童鞋不妨new一个出来,内存管理一直是C/C++中最棘手的部分,远不止new/delete、malloc/free这么简单。随着代码量的递增,程序结构复杂度的提高。今天我们就一起研究一下以精巧著称的nginx的内存池。1.源代码位置 头...

nginx的数据结构1——ngx_int_t与ngx_rbtree_t

面对./src/core子目录中71个源文件,有点无从下手。浏览包含主函数的nginx.c文件,发现nginx使用了很多自行封装的数据结构,不弄清楚这是些什么样的数据结构就很难理解主函数中操作的意义。于是我们挑看起来基础的数据结构开始研究。组织nginx所有数据结构的是ngx_core.h文件。它首先包含了ngx_config.h,我们在ngx_config.h中发现了三个类型定义。1、ngx_int_t、ngx_uint_t、ngx_flag_t nginx.c中看到的第一个陌生数据类型是ng...

nginx高级数据结构源码分析(一)-----双向链表

ng_queue_t是Nginx提供的一个顺序容器,它以双向链表的方式将数据组织在一起。链表作为顺序容器的优势在于,它可以高效的执行插入、删除、合并等操作,在移动链表中的元素时只需要修改指针的指向,因此,它很适合频繁修改容器的场合。相对于其他顺序容器,它的优势有以下三点: (1) 实现了排序功能,采用额是插入排序,虽然不太适合超大规模数据的排序,但是简单实用。(2) 它非常轻量级,不负责链表元素所占内存的分配。ngx_...

nginx的数据结构集合(随时更新)

在学习nginx的时候,因为其数据结构略多,看过后一般就忘记了。所以边学习边记录在这里吧,方便以后查看。 ngx_buf_t:缓冲区结点1: typedefstruct ngx_buf_s ngx_buf_t;2: typedefvoid *ngx_buf_tag_t;3: struct ngx_buf_s {4: /*5: * pos通常是用来告诉使用者本次应该从pos这个位置开始处理内存中的数据,这样设置是因为同一个6: * ngx_buf_t可能被多次反复处理。当然,pos的含义是由使用它的模板定义的7: ...

Nginx高级数据结构源码分析(二)-----动态数组

ngx_array_t是一个顺序容器,它在Nginx中被大量使用。它以数组的形式存储元素,并支持在达到数组容量的上限动态时改变数组的大小。它类似于C++中的vector容器,而且内置了Nginx封装的内存池,因此,它分配的内存也是在内存池中申请得到。 ngx_array_t具备以下三个优点; (1)访问速度快;(2)允许元素个数具备不确定性;(3)负责元素占用内存的分配,这些内存将有内存池统一管理。 动态数组的扩容方式有两...

Nginx高级数据结构源码分析(三)-----链表

ngx_list_t是Nginx封装的链表容器,使用的很频繁。它有两个结构体,ngx_list_t描述的是整个链表,而ngx_list_part_t只描述链表的一个元素。为了方便理解,我们可以将它称为数组的链表。也就是是说,ngx_list_t是一个链表容器,而链表中的元素又是一个数组。事实上,ngx_list_part_t数组中的元素才是用户需要存储的东西。这样的结构表达方式有什么样的好处: (1)链表中存储的元素是灵活的,它可以是任何一种数据结构; (2)...

Nginx高级数据结构源码分析(四)-----内存池

内存池的使用給Nginx带来了很多好处,比如内存使用的便利,逻辑代码的简化以及程序性能的提升。几个关键知识点罗列如下:(1)函数ngx_palloc()尝试从内存中分配size大小的内存时,分两种情况,一种是size大小小于pool->max,称为小块内存分配,若当前内存池节点小于size,则申请一个新的等同大小的内存池节点,然后从这个新内存池节点分配出size大小的内存空间。若size 大于pool->max时,即分配大块内存,此时调用的函数直接向操作...

nginx的数据结构2——自己动手重写红黑树

费话不多说,上重写代码,这次姑且用英语写的注释当复习英语了。 rbtree.h:/** Copyright (C) Bipedal Bit* Verson 1.0.0.1*/#ifndef _RBTREE_H_INCLUDED_ #define _RBTREE_H_INCLUDED_/* the node structure of the red-black tree */ typedef struct rbtree_node_s rbtree_node_t; /* Using type int means its range is -0x7fffffff-1~0x7fffffff. */ typedef int rbtree_key_t; /* Abstract type is complicated to achiev...

nginx的数据结构3——扩展红黑树

发扬我一贯的支线任务狂魔的作风,一晚上就完成了之前设想的红黑树扩展版本。 rbtree.h:/** Copyright (C) Bipedal Bit* Verson 1.0.0.2*/#ifndef _RBTREE_H_INCLUDED_ #define _RBTREE_H_INCLUDED_/* the node structure of the red-black tree */ typedef struct rbtree_node_s rbtree_node_t; /* Using type int means its range is -0x7fffffff-1~0x7fffffff. */ typedef int rbtree_key_t; /* Abstract type is complicat...

Nginx的数据结构--整型和字符串

Nginx的数据结构–整型和字符串Tags: Nginx数据结构考虑到跨平台、高效率、统一规范,Nginx封装了许多的数据结构,大多数都是我们在其他开发项目中经常用到的一些,当然还有一些复杂的容器,笔者每篇文章会对其中一至两个点进行分析和练习讲解。整型封装typedef intptr_t ngx_int_t; typedef uintptr_t ngx_uint_t'字符串类型在Nginx中,使用Ngx_str_t表示字符串,它的定义如下: typedef struct {size_t len;u_char *da...

nginx数据结构之ngx_str_t【代码】

位置:nginx/src/core/ngx_string.h中typedef struct {size_t len;u_char *data; } ngx_str_t;data指针指向字符串的起始地址len表示字符串的有效长度注意:data指针指向的字符串不会以\0结尾,所以使用时必须根据长度len来使用data成员这样定义的好处是什么?首先,通过储存字符串长度,可以减少计算字符串长度的次数,其次nginx可以重复引用一段字符串的内存,data可以指向任何内存,长度表示结束,而不用去copy一份自己...

Nginx源码初探之数据结构 - 链表数据结构

ngx_list_t 介绍 ngx_list_t是Nginx中使用的较为频繁的数据结构,数据内容基于指针获取,内存分配基于内存池进行。由于数据内容存放的是指针,所以理论上ngx_list_t可以用来构建多维链表甚至是网络结构,只是Nginx原始代码封装的函数中并不涉及这些数据结构的操作(实际上也不需要)。 1.数据结构 Nginx链表的数据结构包含两个部分ngx_list_part_s和ngx_list_t。ngx_list_part_s为数据节点,每个数据节点都包含数据...