PC6下载站

分类分类

nginx-1.0.4的容器源码分析—数组结构ngx_array_t

关注+2011-07-12作者:清晨

2 页 数组操作

 2. 数组操作

 数组操作共有5个,如下。

view plaincopy to clipboardprint?
  1. //创建数组   
  2. ngx_array_t*ngx_array_create(ngx_pool_t *p, ngx_uint_t n, size_t size);  
  3.    
  4. //销毁数组   
  5. voidngx_array_destroy(ngx_array_t *a);  
  6.    
  7. //向数组中添加元素   
  8. void*ngx_array_push(ngx_array_t *a);  
  9. void*ngx_array_push_n(ngx_array_t *a, ngx_uint_t n);  
  10.    
  11. //初始化数组   
  12. staticngx_inline ngx_int_t  
  13. ngx_array_init(ngx_array_t*array, ngx_pool_t *pool, ngx_uint_t n, size_t size)  
  因实现都很简单,本文简单分析前3个函数。

 2.1 创建数组

 创建数组的操作实现如下,首先分配数组头(20B),然后分配数组数据区,两次分配均在传入的内存池(pool指向的内存池)中进行。然后简单初始化数组头并返回数组头的起始位置。

view plaincopy to clipboardprint?
  1. ngx_array_t*  
  2. ngx_array_create(ngx_pool_t*p, ngx_uint_t n, size_t size)  
  3. {  
  4.     ngx_array_t *a;  
  5.    
  6.     a = ngx_palloc(p,sizeof(ngx_array_t));  //从内存池中分配数组头   
  7.     if (a == NULL) {  
  8.         return NULL;  
  9.     }  
  10.    
  11.     a->elts = ngx_palloc(p,n * size);  //接着分配n*size大小的区域作为数组数据区   
  12.     if (a->elts == NULL) {  
  13.         return NULL;  
  14.     }  
  15.    
  16.     a->nelts = 0;    //初始化   
  17.     a->size = size;  
  18.     a->nalloc = n;  
  19.     a->pool = p;  
  20.    
  21.     return a;  //返回数组头的起始位置   
  22. }  
  创建数组后内存池的物理结构图如下。

展开全部

相关文章

更多+相同厂商

热门推荐

  • 最新排行
  • 最热排行
  • 评分最高
排行榜

    点击查看更多

      点击查看更多

        点击查看更多

        说两句网友评论

          我要评论...
          取消