// struct ngx_array_t
// nginx 数组结构 {{{
typedef struct {
void *elts; // 数组起始位置
ngx_uint_t nelts; // 数组元素个数
size_t size; // 单个元素大小
ngx_uint_t nalloc; // 空间能够容纳元素个数
ngx_pool_t *pool; // 内存池
} ngx_array_t; // }}}
结构说明
elts 真正的连续存储内存的首地址
nelts 当前已经存在数组中的元素个数
size 每个元素的大小
nalloc 当前数组空间所能容纳的元素个数
pool 指向数组分配所在内存池
动态数组操作函数
nginx动态数组主要提供了以下操作函数
ngx_array_init 数组结构初始化(ngx_arry_create 中调用)
ngx_array_create 动态数组创建
ngx_array_destory 动态数组销毁
ngx_arry_push 在动态数组尾部插入一个元素
ngx_array_push_n 在动态数组尾部插入n个元素
动态数组创建
在这个函数中,首先在内存池中为ngx_array_t结构分配了空间,然后调用了ngx_array_init函数初始化ngx_array_t结构的各个域,并未实际的存储区域分配空间
动态数组的销毁
如果该连续存储区域或ngx_array_t是内存池已有空间的尾部,则将他们释放掉,以便可以节约这部分空间的使用,否则不做任何处理
在动态数组尾部插入一个元素
如果空间足够,则插入该元素,并更新ngx_array_t各个域的值
否则开辟新的连续内存,并将数组中所有数据全部拷贝到新的内存,并添加元素,这样做消耗了一定的效率,但是保证了数组空间的连续性,也就保证了今后随机访问的高效性
在动态数组尾部插入n个元素
与ngx_array_push的操作非常类似,只是他一次性插入n个元素,提高了效率