码迷,mamicode.com
首页 > 其他好文 > 详细

内存池的实现

时间:2014-11-17 22:36:05      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:des   http   使用   on   问题   log   ad   ef   as   

memory pool

移植自nginx, windows平台可用

本人共研究过两个开源内存池的实现,一是nginx内存管理,二是python中内存的管理。由于python中涉及到对象的管理以及缓存,比较复杂,不适合移植到自己的软件中使用,nginx正好相反,短小精悍,适合添加一些特定的需求进行二次开发,原理也很容易理解: 即申请一个pool,每个pool都是独立的,以该pool为单位进行内存管理,可以有效防止内存空洞的出现。

(内存空洞是由于glibc的内存管理机制导致的问题, 一般软件不会直接使用glibc的malloc/free接口使用内存,都会对其进行封装)

函数

- 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_pool

内存池的实现

标签:des   http   使用   on   问题   log   ad   ef   as   

原文地址:http://www.cnblogs.com/persevere/p/4104496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!