分类分类
关注+2011-07-12作者:清晨
2. 数组操作
数组操作共有5个,如下。
//创建数组 ngx_array_t*ngx_array_create(ngx_pool_t *p, ngx_uint_t n, size_t size); //销毁数组 voidngx_array_destroy(ngx_array_t *a); //向数组中添加元素 void*ngx_array_push(ngx_array_t *a); void*ngx_array_push_n(ngx_array_t *a, ngx_uint_t n); //初始化数组 staticngx_inline ngx_int_t ngx_array_init(ngx_array_t*array, ngx_pool_t *pool, ngx_uint_t n, size_t size)因实现都很简单,本文简单分析前3个函数。
2.1 创建数组
创建数组的操作实现如下,首先分配数组头(20B),然后分配数组数据区,两次分配均在传入的内存池(pool指向的内存池)中进行。然后简单初始化数组头并返回数组头的起始位置。
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; //初始化
a->size = size;
a->nalloc = n;
a->pool = p;
return a; //返回数组头的起始位置
} 创建数组后内存池的物理结构图如下。![]()
相关文章
更多+相同厂商
热门推荐
点击查看更多
点击查看更多
点击查看更多
说两句网友评论