函数源码及详细注释
//创建内存池
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); // 暂且看做普通alloc函数
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; // p即为内存池使用时的入口指针
}
ngx_memalign函数
ngx_memalign是开发者为了跨平台进行平台相关的内存对齐而实现的,通过使用宏进行控制,我们在源码剖析的时候可以权当它是普通的内存分配函数,不必纠结: