nginx學習 一 記憶體

2021-09-06 06:07:35 字數 1008 閱讀 8687

網上有很多關於記憶體的學習,此學習的目的是為了能將記憶體用法化為自己的東西靈活用在別處.總體思路是化整為零.

先依此畫張圖:

記憶體池的結構比較簡單,有幾點需特別說明:

1)記憶體池在使用之前需建立,如

pool = ngx_create_pool(1024, null);

2)在使用記憶體池的時候均通過p = ngx_palloc(pool, 512);分配記憶體.

3)第乙個記憶體塊與後續的記憶體塊的大小有些微的差異,以1024大小的記憶體池為例,第乙個記憶體塊的資料區大小為1024-sizeof(ngx_pool_s) = 984,第二個以及後續的記憶體塊的資料區的大小則為1024-sizeof(ngx_pool_data_t) = 1008,如上圖所示.

4)關於欄位failed,源**中有這樣一組**:

for (p = current; p->d.next; p = p->d.next)

}之前一直不理解,網上很多人說是一組經驗值,後來寫了好些測試**,不停分配記憶體池,突然想明白了,也明白了pool->current不一定指向當前記憶體塊的意思.理解如下:

記憶體池實際上是乙個鏈式結構,如果分配記憶體的時候總是從頭開始,一旦記憶體池中的塊特別多,則會影響效率,因此增加了乙個current的指標,當分配策略達到一定程度的時候,將current後移,後面的分配不再使用current之前的記憶體(即使之前的記憶體塊可用),這樣以空間換時間,使得效率盡可能高.

5)記憶體池的分配一旦呼叫了ngx_palloc,p指向的是分配的記憶體,此時當前的記憶體池中的last變數已經指向了當前記憶體的末端,此處特別需要注意.

測試**如下:

void dump_pool(ngx_pool_t*pool)

}int

test_main()

ngx_destroy_pool(pool);

return0;

}

nginx學習 一 記憶體

網上有很多關於記憶體的學習,此學習的目的是為了能將記憶體用法化為自己的東西靈活用在別處.總體思路是化整為零.先依此畫張圖 記憶體池的結構比較簡單,有幾點需特別說明 1 記憶體池在使用之前需建立,如 pool ngx create pool 1024,null 2 在使用記憶體池的時候均通過p ngx...

Nginx學習 一 Nginx安裝

4.結語 最近專案不太忙,阿里雲伺服器也快過期了,所以趁著這個空閒,好好利用伺服器資源,練練手,寫寫部落格。宣告 以下所有操作和截圖都來自於本人阿里雲伺服器例項,操作邏輯和nginx概述借鑑於其他nginx系列部落格。作業系統 centos7.2 64位 nginx是乙個免費的 開源的 高效能的we...

nginx學習筆記 一

1.與nginx同類的軟體 iis2.nginx的依賴庫 gcc gcc c 正則庫 pcre pcre devel zlib zlib devel openssl openssl devel預設的安裝目錄 usr local nginx修改核心引數 etc sysctl.conf sysctl p...