メモリ割当て関連
1409 ワード
1.システム機能パッケージ
メモリ関連の操作は主にos/unix/ngx_alloc.{h,c}およびcore/ngx_palloc.{h,c}下
ここでos/unix/ngx_alloc.{h,c}は最も基本的なメモリ割り当て関数をカプセル化し、cの既存のmalloc/free/memalignなどの既存の関数のカプセル化であり、対応する関数は:
ngx_allocはmallocを使用してメモリ領域を割り当てる
ngx_callocはmallocを使用してメモリ領域を割り当て、空間内容を0 に初期化する.
ngx_memalignは、指定されたalignmentサイズに基づく数値が整列基数である空間を返す.
ngx_freeメモリの解放動作2.ngxのメモリプール
システムモジュールのメモリの使用を便利にするために、メモリの管理を便利にするために、nginxは自分でプロセスプールのメカニズムを実現してメモリの分配と解放を行い、まずnginxは特定のライフサイクルでメモリプールを統一的に構築し、メモリの分配が必要なときにメモリプールの中のメモリを統一的に分配する.最後にnginxは適切な時にメモリプールのリソースを解放し,開発者は必要な時にメモリを申請すればよいが,メモリの解放などの問題をあまり考慮せず,開発の効率を大幅に向上させる.
メモリプールの主な構成は次のとおりです.
メモリ関連の操作は主にos/unix/ngx_alloc.{h,c}およびcore/ngx_palloc.{h,c}下
ここでos/unix/ngx_alloc.{h,c}は最も基本的なメモリ割り当て関数をカプセル化し、cの既存のmalloc/free/memalignなどの既存の関数のカプセル化であり、対応する関数は:
ngx_allocはmallocを使用してメモリ領域を割り当てる
ngx_callocはmallocを使用してメモリ領域を割り当て、空間内容を0 に初期化する.
ngx_memalignは、指定されたalignmentサイズに基づく数値が整列基数である空間を返す.
ngx_freeメモリの解放動作2.ngxのメモリプール
システムモジュールのメモリの使用を便利にするために、メモリの管理を便利にするために、nginxは自分でプロセスプールのメカニズムを実現してメモリの分配と解放を行い、まずnginxは特定のライフサイクルでメモリプールを統一的に構築し、メモリの分配が必要なときにメモリプールの中のメモリを統一的に分配する.最後にnginxは適切な時にメモリプールのリソースを解放し,開発者は必要な時にメモリを申請すればよいが,メモリの解放などの問題をあまり考慮せず,開発の効率を大幅に向上させる.
メモリプールの主な構成は次のとおりです.
typedef struct {
u_char *last; // ,
u_char *end; //
ngx_pool_t *next; // ,
ngx_uint_t failed; //
} ngx_pool_data_t; //
struct ngx_pool_s { //
ngx_pool_data_t d; //
size_t max; //
ngx_pool_t *current; //
ngx_chain_t *chain; // ngx_chain_t
ngx_pool_large_t *large; // , max
ngx_pool_cleanup_t *cleanup; // callback
ngx_log_t *log; //
};
,sizeof(ngx_pool_data_t)=16B,sizeof(ngx_pool_t)=40B。