nginx自定义的数据结构_数组

nginx的数组

nginx数组的实现在ngx_array.h 和 ngx_array.c文件中

nginx数组定义

typedef uintptr_t       ngx_uint_t;

typedef struct {
    void        *elts; //数组的起始地址
    ngx_uint_t   nelts;  // 个数
    size_t       size; //每个元素的大小
    ngx_uint_t   nalloc; // 容量
    ngx_pool_t  *pool;  //内存池
} ngx_array_t;

数组的接口

static ngx_inline ngx_int_t ngx_array_init(ngx_array_t *array, ngx_pool_t *pool, ngx_uint_t n, size_t size)

ngx_array_t *ngx_array_create(ngx_pool_t *p, ngx_uint_t n, size_t size);

void ngx_array_destroy(ngx_array_t *a);

void *ngx_array_push(ngx_array_t *a);

void *ngx_array_push_n(ngx_array_t *a, ngx_uint_t n);

接口说明

ngx_array_init函数

功能说明: 用来初始化数组

参数意义
array要初始化的数组指针
pool数组使用的内存池
n初始化要申请的数组元素数量
size一个数组元素的大小

ngx_array_create函数

功能说明: 用来创建一个数组,使用内存池申请一个array,然后调用ngx_array_init函数实现
参数意义
p数组使用的内存池
n初始化要申请的数组元素数量
size一个数组元素的大小

ngx_array_destroy函数

功能说明: 用来销毁一个数组,这里并不是真正的释放内存空间,只是标记了内存池的内存可以再次被使用
参数意义
a数组指针

ngx_array_push函数

功能说明: 向数组中添加元素
先判断数组申请的空间是否用完,如果已经耗尽,那么需要申请内存,
	申请内存的过程:
		每次数组需要的空间是一个元素的大小
		先判断内存池中是否有足够内存,如果内存充足,修改内存池的已用内存边界,修改数组容量直接对数组扩容
		如果内存池内存不够,内存池接口从系统申请内存大小为数组容量的2倍
		元素个数加一,返回最后一个元素指向的内存
参数意义
a数组指针
返回最后一个元素的内存地址  

ngx_array_push_n

功能说明:向数组后面追加n个数组元素
先判断数组申请的空间是否用完,如果已经耗尽,那么需要申请内存,
	申请内存的过程:
		每次数组需要的空间是n个元素的大小
		先判断内存池中是否有足够内存,如果内存充足,修改内存池的已用内存边界,修改数组容量直接对数组扩容
		如果内存池内存不够,内存池接口从系统申请内存大小为数组容量的2倍,如果n大于数组容量,则扩充的大小为2n个数组元素的容量
		元素个数加n,返回要追加的n个元素在数组中位置的起始地址
参数意义
a数组指针
n新增元素的个数
返回要追加的n个元素在数组中位置的起始地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值