今天沒事了,在查看nginx源代碼中看到ngx_list的結構,發現設計爲鏈表數組的形式,不知道爲何這樣設計nginx
struct ngx_list_part_s { void *elts;//指向數組的起始地址 ngx_uint_t nelts;//數組已經使用多少元素 ngx_list_part_t *next;//下一個鏈表元素的地址 }; typedef struct { ngx_list_part_t *last;//指向鏈表最後一個數組元素 ngx_list_part_t part;//鏈表的首個數組元素 size_t size;//限制每個數組元素的佔用的空間大小 ngx_uint_t nalloc; //鏈表中數組元素一旦分配以後是不可更改的,nalloc表示每一個ngx_list_part_t數組的容量,即最多可存儲多少個數據 ngx_pool_t *pool;//鏈表中管理內存分配的內存池對象 } ngx_list_t;
只實現三個方法:數組
ngx_list_t *ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size);ui
static ngx_inline ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t *pool, ngx_uint_t n, size_t size);私有方法 在ngx_list_create中調用設計
void *ngx_list_push(ngx_list_t *list);對象