Nginx 기본 데이터 구조의 ngxarray_t

2556 단어
ngx_array_t 는 nginx 내부 에서 사용 하 는 배열 구조 입 니 다.nginx 의 배열 구 조 는 저장 에 있어 서 모두 가 인지 하 는 C 언어 에 내 장 된 배열 과 유사 성 을 가진다. 예 를 들 어 실제 데 이 터 를 저장 하 는 구역 도 큰 연속 적 인 메모리 이다.그러나 배열 은 데 이 터 를 저장 하 는 메모리 외 에 도 메타 정 보 를 포함 하여 관련 정 보 를 설명 한다.다음은 배열 의 정의 에서 자세히 알 아 보 겠 습 니 다.ngx_array_t 의 정 의 는 src / core / ngx 에 있 습 니 다.array. c | h 안에 있 습 니 다.
typedef struct ngx_array_s       ngx_array_t;
struct ngx_array_s {
    void        *elts;
    ngx_uint_t   nelts;
    size_t       size;
    ngx_uint_t   nalloc;
    ngx_pool_t  *pool;
};

elts:
실제 데이터 저장 영역 을 가리킨다.
nelts:
배열 의 실제 요소 갯 수.
size:
배열 의 단일 요소 의 크기, 단 위 는 바이트 입 니 다.
nalloc:
배열 의 용량.이 배열 은 확장 을 일 으 키 지 않 는 전제 에서 가장 많이 저장 할 수 있 는 요소 의 개 수 를 나타 낸다.nels 가 nalloc 에 도 착 했 을 때 이 배열 에 요 소 를 저장 하면 배열 의 확장 을 야기 할 수 있 습 니 다.배열 의 용량 은 기 존 용량 의 2 배 크기 로 확 대 될 것 이다.실제로 새로운 메모 리 를 분배 하 는데, 새로운 메모리 의 크기 는 원래 의 메모리 크기 의 2 배 이다.기 존의 데 이 터 는 새로운 메모리 에 복 사 될 것 이다.
pool:
이 배열 은 메모리 의 메모리 풀 을 분배 하 는 데 쓰 인 다.
다음은 ngxarray_t 관련 조작 함수.
ngx_array_t *ngx_array_create(ngx_pool_t *p, ngx_uint_t n, size_t size);

새 배열 대상 을 만 들 고 이 대상 을 되 돌려 줍 니 다.
p:
메모리 할당 에 사용 할 메모리 풀;
n:
배열 의 초기 용량 크기, 즉 확장 되 지 않 은 상태 에서 가장 많이 수용 할 수 있 는 요소 갯 수 입 니 다.
size:
단일 요소 의 크기, 단 위 는 바이트 입 니 다.
void ngx_array_destroy(ngx_array_t *a);

이 배열 의 대상 을 없 애고 분 배 된 메모리 메모리 풀 을 방출 합 니 다.
void *ngx_array_push(ngx_array_t *a);

배열 a 에 요 소 를 추가 하고 새로운 요 소 를 가리 키 는 지침 을 되 돌려 줍 니 다.되 돌아 오 는 포인터 의 사용 유형 을 구체 적 인 유형 으로 바 꾼 다음 에 새로운 요소 자체 나 각 필드 (배열 의 요소 가 복잡 한 유형 이 라면) 에 값 을 부여 해 야 합 니 다.
void *ngx_array_push_n(ngx_array_t *a, ngx_uint_t n);

배열 a 에 n 개의 요 소 를 추가 하고 이 추가 요 소 를 가리 키 는 첫 번 째 요소 의 위 치 를 가리 키 는 지침 을 되 돌려 줍 니 다.
static ngx_inline ngx_int_t ngx_array_init(ngx_array_t *array, ngx_pool_t *pool, ngx_uint_t n, size_t size);

만약 한 배열 의 대상 이 쌓 여 있다 면, ngx 를 호출 할 것 입 니 다.array_destroy 소각 후 다시 사용 하려 면 이 함 수 를 호출 할 수 있 습 니 다.
만약 에 하나의 배열 대상 이 스 택 에 배정 된다 면 이 함 수 를 호출 하여 초기 화 작업 을 한 후에 야 사용 할 수 있 습 니 다.
주의사항: 배열 이 확장 되 었 을 때 오래된 메모리 가 방출 되 지 않 아 메모리 의 낭 비 를 초래 할 수 있다.따라서 배열 의 용량 을 미리 계획 하고 만 들 거나 초기 화 할 때 한 번 에 해결 하여 여러 번 확장 되 어 메모리 낭 비 를 피 하 는 것 이 좋 습 니 다.

좋은 웹페이지 즐겨찾기