為了自身使用的方便,Nginx封裝了很多有用的數(shù)據(jù)結(jié)構(gòu),比如ngx_str_t ,ngx_array_t, ngx_pool_t 等等,對于內(nèi)存池,nginx設(shè)計(jì)的十分精煉,值得我們學(xué)習(xí),本文介紹內(nèi)存池基本知識,nginx內(nèi)存池的結(jié)構(gòu)和關(guān)鍵代碼,并用一個實(shí)際的代碼例子作了進(jìn)一步的講解
一、內(nèi)存池概述
內(nèi)存池是在真正使用內(nèi)存之前,預(yù)先申請分配一定數(shù)量的、大小相等(一般情況下)的內(nèi)存塊留作備用。當(dāng)有新的內(nèi)存需求時,就從內(nèi)存池中分出一部分內(nèi)存塊,若內(nèi)存塊不夠用時,再繼續(xù)申請新的內(nèi)存。
內(nèi)存池的好處有減少向系統(tǒng)申請和釋放內(nèi)存的時間開銷,解決內(nèi)存頻繁分配產(chǎn)生的碎片,提示程序性能,減少程序員在編寫代碼中對內(nèi)存的關(guān)注等
目前一些常見的內(nèi)存池實(shí)現(xiàn)方案有STL中的內(nèi)存分配區(qū),boost中的object_pool,nginx中的ngx_pool_t,google的開源項(xiàng)目TCMalloc等