Nginx内存池相关源码剖析(五)重置函数ngx_reset_pool

当内存池中的内存不再需要时,或者当需要重用内存池时,可以使用ngx_reset_pool函数来清理和重置内存池,以便后续再次使用。 

ngx_reset_pool函数

主要作用是将内存池恢复到初始状态,释放已经分配但尚未使用的内存块,并重置内存池的内部状态信息。这样,当再次需要分配内存时,内存池可以从一个干净、一致的状态开始。

在Nginx的源码中,ngx_reset_pool 函数的实现通常涉及以下几个关键步骤:

  1. 清理已分配的内存块:遍历内存池中的小内存块列表并释放。

  2. 重置内部状态信息:将内存池的内部状态信息重置为初始状态。这包括重置内存池的指针、计数器、标志位等,确保内存池处于一个干净、一致的状态。这样,在下次使用内存池时,可以正确地进行内存分配和管理。

  3. 保持必要的配置信息:虽然ngx_reset_pool 函数用于重置内存池的状态,但它通常会保留一些必要的配置信息,如内存池的大小、分配策略等。这些信息在重置过程中不会被改变,以确保在后续的内存分配中能够按照预期进行。

需要注意的是,ngx_reset_pool 函数并不会释放整个内存池所占用的内存空间,只会释放大块内存的空间。它只是清理和重置内存池的内部状态,以便再次使用。如果需要彻底释放内存池所占用的内存空间,通常需要通过其他机制(如调用内存池销毁函数)来实现。

// 小块内存没有free函数,只能重置
void
ngx_reset_pool(ngx_pool_t *pool)
{ngx_pool_t        *p;ngx_pool_large_t  *l;for (l = pool->large; l; l = l->next) { // 重置大块内存if (l->alloc) {// 释放内存但是没有指针置空,保留了存放在小内存块中的头信息节点// 头信息节点将在下面小内存空间中被重置ngx_free(l->alloc);}}// 重置小块内存// 头信息ngx_pool_s 只有第一块有 -- 块信息ngx_pool_data_t  是每个块都有// 原本的原代码如下注释中// 有缺陷,这样会使得除首块(含头信息)的每个块都浪费了ngx_pool_s-ngx_pool_data_t 大小的空间/*for (p = pool; p; p = p->d.next) { // 遍历小块内存p->d.last = (u_char *) p + sizeof(ngx_pool_t); // 每个块都指向除头信息和块信息之外的内存的首地址p->d.failed = 0;}*//// 修改if(p){ // 第一块(有头信息)指向除头信息ngx_pool_s和块信息ngx_pool_data_t 之外的内存的首地址p->d.last = (u_char *) p + sizeof(ngx_pool_t); p->d.failed = 0;// 第一块之后的每个块(无头信息)都指向除块信息ngx_pool_data_t 之外的内存的首地址for(p = p->d.next; p; p = p->d.next){p->d.last = (u_char *) p + sizeof(ngx_pool_data_t); p->d.failed = 0;}}/// 修改pool->current = pool; // 重置头信息pool->chain = NULL;pool->large = NULL; // 完全舍弃已经释放的大内存
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/820960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ctf.show_web13

上传一句话木马 1.php文件&#xff0c;显示 再改后缀为.jpg&#xff0c;显示错误文件大小 用dirsearch扫一下 备份文件.bak 下载文件源码 <?php header("content-type:text/html;charsetutf-8");$filename $_FILES[file][name];$temp_name $_FILES[file][tm…

Intel 大批高端 CPU 停产,下代主板确认换接口

最近 Intel 出席了 Embedded World 2024 嵌入式世界大会&#xff0c;虽然针对的不是消费领域&#xff0c;可也有不少有意思的产品和信息。 比如&#xff0c;在会上 Intel 公布了新的 Edge 产品组合&#xff1a;Core Ultra Meteor Lake PS、Core Raptor Lake PS 等处理器。 从名…

CDC类下的画线函数

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系将于24小时内删除 目录 1.实验原理(后续再补写) 2.实验步骤 3.运行代码 4.运行结果 1.实验原理(后续再补写) MoveTo(); LineTo(); 2.实验步骤 2.1在对话框中添加如下布局控件 2.2绑定…

Git版本管理软件的安装及使用方法(Sourcetree)

1 安装软件 官网下载Sourcetree软件并安装 Sourcetree官网&#xff1a;https://www.sourcetreeapp.com/ 打开软件登陆账号,登录成功后后全部默认下一步即可 不加载SSH密钥 2 创建仓库 添加仓库-->选择地址-->确认创建 提示弹出选择是 3 保存与读取 创建成功后&#x…

类的加载,反射和注解详解

文章目录 类的加载概述类加载器作用分类获取类加载器的方式 双亲委派机制3种加载器的关系工作机制 类加载器的应用 反射概述关键获取类对象获取构造器对象获取方法对象获取成员变量对象作用 注解概述作用自定义注解格式属性类型 元注解常见的元注解 注解解析概述方法技巧 类的加…

腾讯EdgeOne产品测评体验——多重攻击实战验证安全壁垒:DDoS攻击|CC压测|Web漏洞扫描|SQL注入

腾讯EdgeOne产品测评体验——实战验证安全壁垒&#xff1a;DDoS攻击|CC压测|Web漏洞扫描|SQL注入 写在最前面一、产品概述1.1 什么是边缘安全加速平台 EO&#xff1f;1.2 EdgeOne产品功能 二、准备工作2.1 选择&#xff1a;NS&#xff08;Name Server&#xff09;接入模式或 CN…

【教学类-52-05】20240417动物数独(4宫格)黏贴卡片需要至少几张?难度1-9 打印版

作品展示&#xff1a; 背景需求&#xff1a; 实际打印的是以下代码生成的动物数独&#xff08;2*2&#xff09;学具 【教学类-52-03】20240412动物数独&#xff08;4宫格&#xff09;难度1-9 打印版-CSDN博客文章浏览阅读1.1k次&#xff0c;点赞30次&#xff0c;收藏17次。【教…

打开Visual Studio后出现Visual Assist报错弹窗

安装了新的VA插件后发现无论如何清理打开VS都会报这个旧版VA报错弹窗&#xff0c;修复VS、重装VA都解决不了 后来进到VS安装目录&#xff0c;删掉一个可疑文件后弹窗再也不出现了

秘塔和Kimi AI在资料查询和学习中的使用对比

一、引言 最近老猿在网上查资料时&#xff0c;基本上都使用Kimi AI进行查询&#xff0c;发现其查询资料后总结到位&#xff0c;知识点的准确度较高。今天早上收到一个消息&#xff0c;说新推出的秘塔AI比Kimi更新进&#xff0c;老猿利用在学习的《统计知识学习》简单对比试用了…

电商技术揭秘九:搜索引擎中的SEO数据分析与效果评估

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台的个性…

数字世界的王国:揭秘Facebook的全球影响力

Facebook&#xff0c;作为全球最大的社交媒体平台&#xff0c;已经成为一个数字世界的重要组成部分&#xff0c;拥有数十亿的用户和庞大的影响力。在这篇文章中&#xff0c;我们将深入探讨Facebook的起源、发展、影响力及其在全球数字生态中的地位&#xff0c;以及它如何影响我…

25. 【Android教程】列表控件 ListView

在学习了 ScrollView 及 Adapter 两节内容之后&#xff0c;大家应该对 ListView 有了一些基本的了解&#xff0c;它是一个列表样式的 ViewGroup&#xff0c;将若干 item 按行排列。ListView 是一个很基本的控件也是 Android 中最重要的控件之一。它可以帮助我们完成多个 View 的…

字典树(Trie树)详解

字典树&#xff08;Trie树&#xff09;详解 理论模块&#xff1a; trie 树 字典树是一种用于实现字符串快速检索的多叉树结构 trie 的每个节点都拥有若干个字符指针&#xff0c;若在插入或检索字符串时扫描到一个字符 c c c 就沿着当前节点的 c c c 字符指针&#xff0c…

【Qt 学习笔记】QWidget的windowOpacity属性 | cursor属性 | font属性

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ QWidget的windowOpacity属性 | cursor属性 | font属性 文章编号&#…

leetcode hot100_day20

4/14/2024 128.最长连续序列 自己的 这是前两天做一半的题目了。这题给我的教训就是用哈希表的时候一定一定要考虑重复元素的问题&#xff01;&#xff01;&#xff01;&#xff01; 这题让我想到了最长递增子序列&#xff0c;只是名字有点像。子序列和子数组还不一样一个连续…

算法练习第18天|111.二叉树的最小深度

111.二叉树的最小深度 111. 二叉树的最小深度 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 题目描述&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最…

Unity 左右折叠显示与隐藏UI的简单实现

要实现一个简单的UI左右折叠显示与隐藏&#xff0c;可以结合遮罩&#xff0c;通过代码控制UI区块的宽度和位移来实现。 具体可以按以下步骤实现&#xff1a; 1、新建一个Image组件&#xff0c;并添加精灵&#xff0c;调整大小后&#xff0c;复制一份作为该UI的父物体&#xf…

CANoe中LIN工程主节点的配置(如何切换调度表)

1&#xff1a;前置条件 1&#xff09;工程已经建立&#xff0c;simulation窗口已经配置好&#xff08;包括且不限于通道mappin好&#xff0c;数据库文件已经添加&#xff09; 2&#xff09;我已系统自带sampleCfg工程&#xff0c;作为例子。如下图 2 &#xff1a;主节点的配置…

边缘计算网关主要有哪些功能?-天拓四方

随着物联网&#xff08;IoT&#xff09;的快速发展和普及&#xff0c;边缘计算网关已经成为了数据处理和传输的重要枢纽。作为一种集成数据采集、协议转换、数据处理、数据聚合和远程控制等多种功能的设备&#xff0c;边缘计算网关在降低网络延迟、提高数据处理效率以及减轻云数…