ngx_pfree
1 定义ngx_pfree 函数 定义在 ./nginx-1.24.0/src/core/ngx_palloc.cngx_int_tngx_pfree(ngx_pool_t*pool,void*p){ngx_pool_large_t*l;for(lpool-large;l;ll-next){if(pl-alloc){ngx_log_debug1(NGX_LOG_DEBUG_ALLOC,pool-log,0,free: %p,l-alloc);ngx_free(l-alloc);l-allocNULL;returnNGX_OK;}}returnNGX_DECLINED;}ngx_pfree 函数 用于释放 Nginx 内存池中的大块内存。 它遍历池的 large 链表找到与传入地址匹配的大块内存节点后 释放该内存并将节点指针置空最后返回 NGX_OK 若未找到对应内存则返回 NGX_DECLINED。 该函数仅适用于大块内存池内的小块内存无法通过它单独释放。2 详解1 函数签名ngx_int_tngx_pfree(ngx_pool_t*pool,void*p)返回值 NGX_OK成功释放指定的大块内存。 NGX_DECLINED在内存池的 large 链表中未找到传入的地址因此未执行任何释放操作。参数1 ngx_pool_t *pool 指向 ngx_pool_t 结构的指针 ngx_pfree 需要知道在哪个池中查找待释放的内存参数2 void *p 需要释放的内存块的起始地址2 逻辑流程{ngx_pool_large_t*l;for(lpool-large;l;ll-next){if(pl-alloc){ngx_log_debug1(NGX_LOG_DEBUG_ALLOC,pool-log,0,free: %p,l-alloc);ngx_free(l-alloc);l-allocNULL;returnNGX_OK;}}returnNGX_DECLINED;}#1 遍历大块内存链表 #2 比较传入的地址 p 与当前节点记录的分配地址 l-alloc 相同则释放内存 将链表节点中的 alloc 指针置为 NULL 函数返回成功状态 #3 返回未找到的状态码 NGX_DECLINED 表示“已声明拒绝”或“未处理”。 在此处意味着遍历了整个 large 链表都没有找到与 p 匹配的节点。