首頁 > 後端開發 > php教程 > nginx 原始碼學習筆記(十一)-基本容器-ngx_list

nginx 原始碼學習筆記(十一)-基本容器-ngx_list

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-07-29 09:10:55
原創
790 人瀏覽過

ngx_list.{c|h}結構非常簡單,如果你看過之前的array介紹,這一節可以一帶而過:

[cpp] view plaincopyprint?

  1. typedef struct ngx_list_part_s  ngx_list_part_s _s {  
  2.     void             
  3.     ngx_uint_t        nelts;            ngx_list_part_t  *next;            //下一個資料指標    struct {  
  4.     ngx_list_part_t  *last;  🎠      //資料部分  
  5.     size    //單一資料大小
  6.   
  7.     ngx_uint_t        nalloc;         /預設_t       *pool;           //所屬的記憶體池   list的操作:
  8. [cpp] view plaincopyprint?
    1. //建立list  
    2. ngx_list_t *  
    3. ize_t size)  
    4. {  
    5.     ngx_list_t  *list;
    6.     list = ngx_palloc(pool, 
    7. sizeof(ngx_list_t));        if (list == NULL) {  
    8. return NULL;  
    9.     }          //分配list資料部分記憶體空間
    10.   
    11.     if  (list->part.elts == NULL) {  
    12.               list->part.nelts = 0;                為0
    13.   
    14.     list->part.next = NULL;           
    15.     list->last = &list->part;            
    16.       list->size = size;           資料的大小
    17.   
    18.     list->nalloc = n;          預設資料量  
    19.     list->pool = pool;                      return
    20.  list;                          
    21. //在這裡如果你發現跟建立陣列比較類似,那麼表示你已經開始入門了  
    22. }
    23. //新增資料 可以看到和新增陣列基本上一樣,也是回傳要新增資料的位址,然後運作  
    24.   * _list_push(ngx_list_t * l)  
    25. {  
    26.     
    27. void
    28.         ngx_list_part_t  *last;      last = l->last;  
    29. nelts == l->nalloc) {  
    30.         /* the last part 
    31.         last = ngx_palloc(l->pool, sizeof (ngx_list_part_t));  
    32.         if (last ==    return
    33.  NULL;  
    34.         }  ->pool, l->nalloc * l->size);  
    35.          if          return NULL;  
    36. return NULL;  
    37.         }
    38.         last->nelts = 0;  
    39.          l->last->next = last;  
    40.         l->last = last;      }  
    41.     elt = (char *)    last->nelts++;  
    42.     
    43. return elt;
    44. }  
    45. [cpp] view plaincopyprint?
    46. //如何遍歷list
    47.   
    48. part = &list.part;   
    49. for
    50.  (i = 0 ;; i++) {    
    51.     if
            if

     (part->next == NULL) {  

                  
    1. break;  
    2.         }  
    3.   
    4.         part = part->next;  
    5.         data = part->elts;  
    6.         i = 0;  
    7.     }  
    8.   
    9.     ...  
    10. 以上就介紹了nginx 原始碼學習筆記(十一)——基本容器——ngx_list,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
javascript - js正規符合特定字串
來自於 1970-01-01 08:00:00
0
0
0
為什麼說非物件呼叫成員函數fetch()
來自於 1970-01-01 08:00:00
0
0
0
資料庫設定檔必須要用二維數組
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板