Chinaunix首页 | 论坛 | 博客
  • 博客访问: 394551
  • 博文数量: 87
  • 博客积分: 2571
  • 博客等级: 少校
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-29 13:10
文章分类

全部博文(87)

文章存档

2012年(49)

2011年(7)

2010年(26)

2009年(5)

分类: LINUX

2011-12-30 13:52:34

内存池
nginx中的内存池是由N个内存池链表组成的,当一个内存池满了以后,就会从下一个内存池中提取空间来使用。
struct ngx_pool_s {
    ngx_pool_data_t       d; //表示数据区域
    size_t                max; //内存池能容纳数据的大小
    ngx_pool_t *          current; //当前内存池块(nginx中的内存池是又一连串的内存池链表组成的)
    ngx_chain_t*          chain; //主要为了将内存池连接起来
    ngx_pool_large_t*     large; //大块的数据
    ngx_pool_cleanup_t*   cleanup; //清理函数
    ngx_log_t*            log; //写log
};

其中结构体 

数据区;
typedef struct {
   u_char              *last;
   u_char              *end;
   ngx_pool_t         *next;
   ngx_uint_t          failed; //failed标志申请内存的时候失败的次数。
} ngx_pool_data_t;
大块数据;
当一个申请的内存空间大小比内存池的大小还要大的时候,malloc一块大的空间,再内存池用保留这个地址的指针
struct ngx_pool_large_s {
   ngx_pool_large_t*        next;
   void*                 alloc;
};
ngx_pool_cleanup_t保存内存池被销毁时用的清理函数
typedef void (*ngx_pool_cleanup_pt)(void *data);
struct ngx_pool_cleanup_s {
   ngx_pool_cleanup_pt        handler;
   void*                        data;
   ngx_pool_cleanup_t*        next;
};

ngx_pool_t* ngx_create_poo(size_t size)
创建内存池
void* ngx_palloc(ngx_pool_t* pool, size_t size)
从内存池中分配内存
void ngx_destroy_pool(ngx_pool_t* pool)
内存池的销毁
static void* ngx_palloc_block(ngx_pool_t* pool, size_t size)
在nginx中,当内存池满了以后,会增加一个新的内存池。这个动作就是靠ngx_palloc_block函数实现的。
ngx_palloc_large 和 ngx_pfree
在nginx中,小块内存除了在内存池销毁之外是不能释放的,但是大块内存却可以,
-- 这两个函数就是用来控制大块内存的申请和释放
阅读(1212) | 评论(0) | 转发(0) |
0

上一篇:ngnix简述

下一篇:nginx入口函数

给主人留下些什么吧!~~