為了自身使用的方便,Nginx封裝了很多有用的數(shù)據(jù)結(jié)構(gòu),比如ngx_str_t ,ngx_array_t, ngx_pool_t 等等,對(duì)于內(nèi)存池,nginx設(shè)計(jì)的十分精煉,值得我們學(xué)習(xí),本文介紹內(nèi)存池基本知識(shí),nginx內(nèi)存池的結(jié)構(gòu)和關(guān)鍵代碼,并用一個(gè)實(shí)際的代碼例子作了進(jìn)一步的講解

 

 

一、內(nèi)存池概述

    內(nèi)存池是在真正使用內(nèi)存之前,預(yù)先申請(qǐng)分配一定數(shù)量的、大小相等(一般情況下)的內(nèi)存塊留作備用。當(dāng)有新的內(nèi)存需求時(shí),就從內(nèi)存池中分出一部分內(nèi)存塊,若內(nèi)存塊不夠用時(shí),再繼續(xù)申請(qǐng)新的內(nèi)存。

   內(nèi)存池的好處有減少向系統(tǒng)申請(qǐng)和釋放內(nèi)存的時(shí)間開(kāi)銷(xiāo),解決內(nèi)存頻繁分配產(chǎn)生的碎片,提示程序性能,減少程序員在編寫(xiě)代碼中對(duì)內(nèi)存的關(guān)注等

   目前一些常見(jiàn)的內(nèi)存池實(shí)現(xiàn)方案有STL中的內(nèi)存分配區(qū),boost中的object_pool,nginx中的ngx_pool_t,google的開(kāi)源項(xiàng)目TCMalloc等

 

網(wǎng)友評(píng)論