Nginx中的数组ngx_array_t

typedef struct {
    void        *elts;
    ngx_uint_t   nelts;
    size_t       size;
    ngx_uint_t   nalloc;
    ngx_pool_t  *pool;
} ngx_array_t;
void *  
ngx_array_push(ngx_array_t *a)  
{  
    void        *elt, *new;  
    size_t       size;  
    ngx_pool_t  *p;  
  
    if (a->nelts == a->nalloc) {//数组已满  
        size = a->size * a->nalloc;  
        p = a->pool;  
  
        if ((u_char *) a->elts + size == p->d.last  
            && p->d.last + a->size <= p->d.end)//如果p的剩余空间>=一个数组元素的空间,就分配一个空间给数组  
        {  
            p->d.last += a->size;//调整pool的last,即修改下一次可分配空间的其实地址  
            a->nalloc++;  
  
        } else {  
            new = ngx_palloc(p, 2 * size);//申请新的空间,大小是原来的2倍,假如pool的内存不足够分配一个新的数组元素  
            if (new == NULL) {  
                return NULL;  
            }  
  
            ngx_memcpy(new, a->elts, size);//把原有的元素拷贝到新分配的内存区  
            a->elts = new;//修改数组数据区的地址,使其指向新分配的内存区  
            a->nalloc *= 2;//修改数组可容纳的元素个数,是原来容纳元素的2倍  
        }  
    }  
  
    elt = (u_char *) a->elts + a->size * a->nelts;//新增加元素的地址  
    a->nelts++;//数组中元素的个数加1  
  
    return elt;//返回新增加元素的地址  
} 

你可能感兴趣的:(Nginx中的数组ngx_array_t)