嗨,由于最近一周都在忙着工作的时候,江门移动割接,配合华为的一些无理要求。烦死。而且,我最近都打算每天晚上要跑2.5公里。锻炼身体。
本节主要将要讲述Ngnix是如何使用内存池的。
下面这些函数都是在文件 ngx_palloc.c 中实现。
首先我们结构已经定下来了。那么我们就要在内存上申请了。 看如下定义函数。
调用的时候代码:
pool = ngx_create_pool(NGX_CYCLE_POOL_SIZE, log);
ngx_create_pool 函数如下:
ngx_pool_t * ngx_create_pool(size_t size, ngx_log_t *log) { ngx_pool_t *p; p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log); /////自己对其内存分配,在我的上一节博客 if (p == NULL) { return NULL; } p->d.last = (u_char *) p + sizeof(ngx_pool_t); p->d.end = (u_char *) p + size; p->d.next = NULL; p->d.failed = 0; size = size - sizeof(ngx_pool_t); p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL; p->current = p; p->chain = NULL; p->large = NULL; p->cleanup = NULL; p->log = log; return p; }
下面是ngx_memalign 函数的实现,具体实现请看我上一节的内容。
void * ngx_memalign(size_t alignment, size_t size, ngx_log_t *log) { void *p; int err; err = posix_memalign(&p, alignment, size); if (err) { ngx_log_error(NGX_LOG_EMERG, log, err, "posix_memalign(%uz, %uz) failed", alignment, size); p = NULL; } ngx_log_debug3(NGX_LOG_DEBUG_ALLOC, log, 0, "posix_memalign: %p:%uz @%uz", p, size, alignment); return p; }
函数ngx_create_pool 的第一个参数是要申请内存的大小。
下面一个图片比较直观的反映了申请的内存结构
今天就只说这些。内存池的申请。
更多文章欢迎关注:http://blog.csdn.net/wallwind