typedef struct ngx_array_s ngx_array_t;
struct ngx_array_s {
void *elts; //指向实际的数据存储区
ngx_uint_t nelts; //数组实际元素个数
size_t size; //数组单个元素的大小,单位是字节
ngx_uint_t nalloc;//数组的容量。
ngx_pool_t *pool; //该数组用来分配内存的内存池
};
/*
创建一个新的数组对象,并返回这个对象。
p:数组分配内存使用的内存池。
n:数组的初始容量大小,即在不扩容的情况下最多可以容纳的元素个数。
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);
/*在数组a上新追加一个元素,并返回指向新元素的指针。
需要把返回的指针使用类型转换,转换为具体的类型,
然后再给新元素本身或者是各字段(如果数组的元素是复杂类型)赋值。*/
void *ngx_array_push(ngx_array_t *a);
/*在数组a上追加n个元素,并返回指向这些追加元素的首个元素的位置的指针。*/
void *ngx_array_push_n(ngx_array_t *a, ngx_uint_t n);
/*如果一个数组对象是被分配在堆上的,那么当调用ngx_array_destroy销毁以后,如果想再次使用,就可以调用此函数。
如果一个数组对象是被分配在栈上的,那么就需要调用此函数,进行初始化的工作以后,才可以使用。*/
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_palloc分配内存,数组在扩容时,旧的内存不会被释放,会造成内存的浪费。
因此,最好能提前规划好数组的容量,在创建或者初始化的时候一次搞定,避免多次扩容,造成内存浪费。*/
nginx数据结构(ngx_array_t)
最新推荐文章于 2021-07-10 14:06:38 发布
本文介绍了NGINX中用于管理动态数组的ngx_array_t结构体及其相关操作函数,包括ngx_array_create、ngx_array_destroy、ngx_array_push等,探讨了如何高效地管理和使用这些数组。
摘要由CSDN通过智能技术生成