nginx原始碼分析 陣列

2022-04-29 07:51:07 字數 1997 閱讀 7415

ngx_array.h

/* */

#ifndef _ngx_array_h_included_

#define _ngx_array_h_included_#include

#include

typedef

struct

ngx_array_t;

//建立陣列(記憶體池,初始容量,元素大小)

ngx_array_t *ngx_array_create(ngx_pool_t *p, ngx_uint_t n, size_t size);

//銷毀陣列(目標陣列)

void ngx_array_destroy(ngx_array_t *a);

//新增元素(目標陣列)

void *ngx_array_push(ngx_array_t *a);

//新增n個元素(目標陣列,元素數量)

void *ngx_array_push_n(ngx_array_t *a, ngx_uint_t 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)

return

ngx_ok;

}#endif /* _ngx_array_h_included_ */

ngx_array.c

/* */

#include

#include

//建立陣列(記憶體池,初始容量,元素大小)

ngx_array_t *ngx_array_create(ngx_pool_t *p, ngx_uint_t n, size_t size)

//初始化陣列(目標陣列,記憶體池,初始容量,元素大小)

if (ngx_array_init(a, p, n, size) !=ngx_ok)

returna;}

//銷毀陣列(目標陣列)

void

ngx_array_destroy(ngx_array_t *a)

//判斷陣列是否位於記憶體塊的最後位置,如果是直接調整記憶體的引數進行刪除

if ((u_char *) a + sizeof(ngx_array_t) == p->d.last)

//如果不是,則由記憶體池自行**}//

新增元素(目標陣列)

void *ngx_array_push(ngx_array_t *a)

else

ngx_memcpy(

new, a->elts, size);

a->elts = new

; a->nalloc *= 2

; }

}//elts指標,指向記憶體塊

elt = (u_char *) a->elts + a->size * a->nelts;

//累加元素數量

a->nelts++;

//返回新元素

return

elt;}//

新增n個元素(目標陣列,元素數量)

void *ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)

else

ngx_memcpy(

new, a->elts, a->nelts * a->size);

a->elts = new

; a->nalloc =nalloc;}}

//elt指標,指向第乙個新元素的記憶體位址

elt = (u_char *) a->elts + a->size * a->nelts;

//累加元素數量

a->nelts +=n;

//返回第乙個新元素

return

elt;

}

nginx 原始碼分析

近期準備研究一下nginx原始碼,此處記錄一下。計畫 1 了解evan miller 的文章 2 了解nginx的組織架構 3 了解nginx的基本資料結構 4 熟悉nginx的主要module及執行機制,主要是core http event os 5 簡單的module開發及測試 一 準備 為了方...

nginx原始碼分析 從原始碼看nginx框架總結

nginx原始碼總結 1 中沒有特別繞特別彆扭的編碼實現,從變數的定義呼叫函式的實現封裝,都非常恰當,比如從函式命名或者變數命名就可以看出來定義的大體意義,函式的基本功能,再好的架構實現在編碼習慣差的人實現也會黯然失色,如果透徹理解 的實現,領悟架構的設計初衷,覺得每塊 就想經過耐心雕琢一樣,不僅僅...

Nginx原始碼分析 connections陣列

本文的標題讓我糾結了好久,不知道是connections陣列合適,還是connections鍊錶更合適 nginx在此或多或少的注入了二者的特點,先不管是叫陣列還是叫鍊錶吧,只要能夠弄明白這個connections是怎麼回事就大功告成。nginx的每個worker程序都使用乙個相同的connecti...