內存池的實現

memory pool

移植自nginx, windows平臺可用python

本人共研究過兩個開源內存池的實現,一是nginx內存管理,二是python中內存的管理。因爲python中涉及到對象的管理以及緩存,比較複雜,不適合移植到本身的軟件中使用,nginx正好相反,短小精悍,適合添加一些特定的需求進行二次開發,原理也很容易理解: 即申請一個pool,每一個pool都是獨立的,以該pool爲單位進行內存管理,能夠有效防止內存空洞的出現。nginx

(內存空洞是因爲glibc的內存管理機制致使的問題, 通常軟件不會直接使用glibc的malloc/free接口使用內存,都會對其進行封裝)git

函數

- ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log);
- void ngx_destroy_pool(ngx_pool_t *pool);
- void ngx_reset_pool(ngx_pool_t *pool);
- void *ngx_palloc(ngx_pool_t *pool, size_t size);
- void *ngx_pnalloc(ngx_pool_t *pool, size_t size);
- void *ngx_pcalloc(ngx_pool_t *pool, size_t size);
- void *ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment);
- int ngx_pfree(ngx_pool_t *pool, void *p);

如下接口未測試

- ngx_pool_cleanup_t *ngx_pool_cleanup_add(ngx_pool_t *p, size_t size);
- void ngx_pool_run_cleanup_file(ngx_pool_t *p, ngx_fd_t fd);
- void ngx_pool_cleanup_file(void *data);
- void ngx_pool_delete_file(void *data);

下載:https://github.com/xieweihua/Data-structure-and-algorithm/tree/master/memory_poolgithub

相關文章
相關標籤/搜索