ngx_list.{c|h} 구조는 매우 간단합니다. 배열에 대한 이전 소개를 읽었다면 다음 섹션을 건너뛰어도 됩니다. [cpp] 보기 일반 카피프린트? typedef struct ngx_list_part_s ngx_list_part_t; 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 부분; _t size; //단일 데이터 크기 //기본 데이터 개수 ngx_pool_t *pool //속해 있는 메모리 풀 } ngx_list_t; 일반 카피프린트? //목록 생성 ngx_list_t * >ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t 사이즈) { ngx_list_t *list list = ngx_palloc(pool, sizeof (ngx_list_t)) 🎜> if (목록 == NULL) { 반환 NULL } list->part.elts = ngx_palloc(pool, n * size) > (list->part.elts == NULL) { 반환 NULL } list->part.nelts = 0; //실제 데이터 개수는 0개입니다 list-> ;part.next = NULL; list->last = &list->part > // 각 데이터의 크기 초기화 list- & gt; nalloc = n // 사전 설정된 데이터 양 list->pool return list; > //여기서 배열을 만드는 것과 유사하다고 판단되면 시작한 것입니다. 시작하세요 }//데이터 추가 기본적으로 배열을 추가하는 것과 동일하다고 볼 수 있으며 추가할 데이터의 주소도 반환한 후 연산을 수행합니다. void * ngx_list_push(ngx_list_t *l) >{ 마지막; 마지막 = l->마지막 if (last->nelts == l ->nalloc) { /* the 마지막 부분이 꽉 찼습니다. 새 목록 부분을 할당하세요. */ last = ngx_palloc(l->pool, sizeof (ngx_list_part_t)); if (last == NULL) { 반환 NULL, } > 만약 (last->elts == NULL) { return NULL > last; ->next = NULL l->last->next = 마지막 l->last = 마지막; ; } elt = (문자 *) 마지막 ->elts + l-> ;size * last->nelts last->nelts++ return elt; > } 🎜>[cpp] 보기 일반 카피프린트? //리스트 순회 방법 part = &list.part ; data = part->elts > (i = 0 ;; i++) { (i >= 부분->nelts) { if (part->next == NULL) { break; 🎜> 부분 = 부분->다음 데이터 = 부분- >elts; i=0; } i] ... } 위 내용은 nginx 소스코드 연구 노트(11) - 기본 컨테이너 - ngx_list 관련 내용을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.