Nginx 소스 코드 완전 주석 (3) ngxlist.h / ngx_list.c

8207 단어 nginx
목록 헤더 파일


#ifndef _NGX_LIST_H_INCLUDED_ #define _NGX_LIST_H_INCLUDED_ #include <ngx_config.h> #include <ngx_core.h> typedef struct ngx_list_part_s ngx_list_part_t; //    part            struct ngx_list_part_s { void *elts; //       ngx_uint_t nelts; //         ngx_list_part_t *next; //    part }; //      typedef struct { ngx_list_part_t *last; //     part    ngx_list_part_t part; //    size_t size; ngx_uint_t nalloc; //              ngx_pool_t *pool; //     } ngx_list_t; ngx_list_t *ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size); static ngx_inline ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t *pool, ngx_uint_t n, size_t size) { //   list                n * size     list->part.elts = ngx_palloc(pool, n * size); if (list->part.elts == NULL) { return NGX_ERROR; } list->part.nelts = 0; //        0 list->part.next = NULL; list->last = &list->part; //     ,       list->size = size; //               (   ) list->nalloc = n; //               list->pool = pool; //     return NGX_OK; } //              (      ,        ) /* * * the iteration through the list: * * part = &list.part; * data = part->elts; * * for (i = 0 ;; i++) { * * if (i >= part->nelts) { * if (part->next == NULL) { * break; * } * * part = part->next; * data = part->elts; * i = 0; * } * * ... data[i] ... * * } */ void *ngx_list_push(ngx_list_t *list); #endif /* _NGX_LIST_H_INCLUDED_ */ 

목록 원본 파일


#include <ngx_config.h> #include <ngx_core.h> ngx_list_t * ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size) { ngx_list_t *list; //      list = ngx_palloc(pool, sizeof(ngx_list_t)); if (list == NULL) { return NULL; } //              list->part.elts = ngx_palloc(pool, n * size); if (list->part.elts == NULL) { return NULL; } //               0 list->part.nelts = 0; list->part.next = NULL; list->last = &list->part; list->size = size; list->nalloc = n; list->pool = pool; //            return list; } //            void * ngx_list_push(ngx_list_t *l) { void *elt; ngx_list_part_t *last; last = l->last; //              ==              ,           if (last->nelts == l->nalloc) { /* the last part is full, allocate a new list part */ //        ,          last last = ngx_palloc(l->pool, sizeof(ngx_list_part_t)); if (last == NULL) { return NULL; } //        ,                  last->elts = ngx_palloc(l->pool, l->nalloc * l->size); if (last->elts == NULL) { return NULL; } //               0 last->nelts = 0; last->next = NULL; //         ,           l->last->next = last; //                l->last = last; } //                  +      *            //               elt = (char *) last->elts + l->size * last->nelts; //              1 last->nelts++; //               return elt; } 

위 에서 알 수 있 듯 이 create 는 pool 에서 list 구 조 를 정의 하 는 메모리 로 헤더 노드 의 메모 리 를 분배 합 니 다.init 는 기 존 list 를 초기 화 합 니 다.

좋은 웹페이지 즐겨찾기