メモリ割当て関連

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は適切な時にメモリプールのリソースを解放し,開発者は必要な時にメモリを申請すればよいが,メモリの解放などの問題をあまり考慮せず,開発の効率を大幅に向上させる.
メモリプールの主な構成は次のとおりです.
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。