您的位置:首页 > 文旅 > 美景 > 在安阳想建个网站怎么做_台州论坛_百度推广网站平台_百度网盘app下载安装官方免费下载

在安阳想建个网站怎么做_台州论坛_百度推广网站平台_百度网盘app下载安装官方免费下载

2025/2/27 4:18:24 来源:https://blog.csdn.net/weixin_41812346/article/details/145680797  浏览:    关键词:在安阳想建个网站怎么做_台州论坛_百度推广网站平台_百度网盘app下载安装官方免费下载
在安阳想建个网站怎么做_台州论坛_百度推广网站平台_百度网盘app下载安装官方免费下载

ngx_create_pool

声明在 src\core\ngx_palloc.h 中

ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log);

实现在 src\core\ngx_palloc.c 中

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_pool_t *ngx_create_pool(size_t size, ngx_log_t *log)
  • 功能 :创建一个大小为 size 的内存池,并返回指向该内存池的指针。
  • 参数
    • size:指定内存池的总大小。
    • log:日志对象,用于记录错误信息。
  • 返回值 :成功时返回指向内存池的指针,失败时返回 NULL

定义局部变量
ngx_pool_t *p;
  • 定义一个指针变量 p,用于存储新创建的内存池对象的地址。

分配内存
p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
if (p == NULL) {return NULL;
}

调用 ngx_memalign 函数分配一块对齐的内存,大小为 size,对齐方式为 NGX_POOL_ALIGNMENT

如果分配失败(返回 NULL),直接返回 NULL,表示内存池创建失败。


ngx_memalign

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_memalign函数-CSDN博客


NGX_POOL_ALIGNMENT

定义在 src\core\ngx_palloc.h

#define NGX_POOL_ALIGNMENT       16

初始化内存池的 d 域 

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;

  • p->d.last:指向当前内存池中可用内存的起始位置,初始值为 p 加上 sizeof(ngx_pool_t),即跳过内存池头部结构体。
  • p->d.end:指向内存池的末尾,初始值为 p + size
  • p->d.next:指向下一个内存池块,默认初始化为 NULL
  • p->d.failed:记录分配失败的次数,初始值为 0

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_pool_t 类型-CSDN博客

计算最大分配大小 

size = size - sizeof(ngx_pool_t);
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;

size 减去 sizeof(ngx_pool_t),得到实际可用于分配的内存大小。

p->max 设置为较小值:sizeNGX_MAX_ALLOC_FROM_POOL

p->max 表示从内存池中分配的最大块大小。

如果请求的内存超过 p->max,则会使用大块内存分配机制(见后续的 large 字段)。


 NGX_MAX_ALLOC_FROM_POOL

Ubuntu 下 nginx-1.24.0 源码分析 - NGX_MAX_ALLOC_FROM_POOL-CSDN博客


初始化其他字段 

p->current = p;
p->chain = NULL;
p->large = NULL;
p->cleanup = NULL;
p->log = log;
  • p->current:指向当前正在使用的内存池块,初始值为 p
  • p->chain:指向内存池链表,默认初始化为 NULL
  • p->large:指向大块内存分配链表,默认初始化为 NULL
  • p->cleanup:指向清理回调函数链表,默认初始化为 NULL
  • p->log:保存日志对象,用于记录错误信息。
返回内存池指针 
return p;
  • 返回指向新创建的内存池对象的指针。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com