理解 Nginx 源碼之五鏈表結構 ngx

Nginx 鏈表結構 ngx_list_t


鏈表結構

ngx_list_t 是 Nginx 封裝的鏈表容器,鏈表容器內存分配是基於內存池進行的,操作方便,效率高。Nginx 鏈表容器和普通鏈表類似,均有鏈表表頭和鏈表節點,通過節點指針組成鏈表。其結構定義如下:

理解 Nginx 源碼之五鏈表結構 ngx_list_t

鏈表數據結構如下圖所示:

理解 Nginx 源碼之五鏈表結構 ngx_list_t

鏈表操作

Nginx 鏈表的操作只有兩個:創建鏈表 和 添加元素。由於鏈表的內存分配是基於內存池,所有內存的銷燬由內存池進行,即鏈表沒有銷燬操作。

創建鏈表

創建新的鏈表時,首先分配鏈表表頭,再對該鏈表進行初始化,在初始化過程中分配頭節點數據區內存。

理解 Nginx 源碼之五鏈表結構 ngx_list_t

添加元素

添加元素到鏈表時,都是從最後一個節點開始,首先判斷最後一個節點的數據區是否由內存存放新增加的元素,若足以存儲該新元素,則返回存儲新元素內存的位置,若沒有足夠的內存存儲新增加的元素,則分配一個新的節點,再把該新的節點連接到現有鏈表中,並返回存儲新元素內存的位置。注意:添加的元素可以是整數,也可以是一個結構。

理解 Nginx 源碼之五鏈表結構 ngx_list_t

測試程序:

理解 Nginx 源碼之五鏈表結構 ngx_list_t

mian函數

理解 Nginx 源碼之五鏈表結構 ngx_list_t

輸出結果:

理解 Nginx 源碼之五鏈表結構 ngx_list_t

《深入理解 Nginx 》

《nginx源碼分析—鏈表結構ngx_list_t》


分享到:


相關文章: