Nginx 기본 데이터 구조의 ngxarray_t
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 소각 후 다시 사용 하려 면 이 함 수 를 호출 할 수 있 습 니 다.
만약 에 하나의 배열 대상 이 스 택 에 배정 된다 면 이 함 수 를 호출 하여 초기 화 작업 을 한 후에 야 사용 할 수 있 습 니 다.
주의사항: 배열 이 확장 되 었 을 때 오래된 메모리 가 방출 되 지 않 아 메모리 의 낭 비 를 초래 할 수 있다.따라서 배열 의 용량 을 미리 계획 하고 만 들 거나 초기 화 할 때 한 번 에 해결 하여 여러 번 확장 되 어 메모리 낭 비 를 피 하 는 것 이 좋 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.