1. 数据结构
nginx中的数组结构为ngx_array_t,其定义如下:
struct ngx_array_s {
void *elts; //数组元素的起始位置
ngx_uint_t nelts; //实际存放的元素个数
size_t size; //每个元素的大小
ngx_uint_t nalloc; //数组所含空间个数,即实际分配的空间个数
ngx_pool_t *pool; //该数组在此内存池中分配
};
typedef struct ngx_array_s ngx_array_t;
其中nelts为实际存放的元素个数,nalloc为已分配的元素个数,每个元素的占size大小,故实际分配的实际空间为(size*nalloc)。
2.操作接口
2.1. 创建数组
ngx_array_t *
ngx_array_create(ngx_pool_t *p, ngx_uint_t n, size_t size)
{
ngx_array_t *a;
a = ngx_palloc(p, sizeof(ngx_array_t)); //从内存池中分配数组头
if (a == NULL) {
return NULL;
}
a->elts = ngx_palloc(p, n * size); //接着分配n*size大小的区域作为数组数据区
if (a->elts == NULL) {
return NULL;
}
a->nelts = 0;