nginx的动态数组--ngx_array_t

来源:互联网 发布:用stata怎么导面板数据 编辑:程序博客网 时间:2024/05/17 14:17
// 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个元素,提高了效率


0 0
原创粉丝点击