AntDB内存管理之内存上下文

news2025/5/25 21:33:11

1. 主题说明

AntDB的内存管理在开发时,使用了内存上下文机制来实现内存管理。本文就从AntDB的内存上下文机制出发,解析内存上下文的实现原理。
AntDB的代码中,涉及到内存的处理时,经常会看到下面这样的代码。

图1:切换内存上下文示例


以及图2所示的代码。

图2:在内存上下文中申请内存

这与平常开发C/C++程序的内存操作方式不太一样,多多少少会让人产生一些疑惑:

- 内存操作前后的MemoryContextSwitchTo是什么意思?

- 这个内存上下文为什么要切来切去的?什么时候需要切换?

- palloc函数只是调了一个函数指针,实际上由什么函数来实现的?

- 为什么经常只能看到内存申请操作,却看不到释放操作?内存申请到哪去了?不释放没问题吗?

接下来就为各位小伙伴慢慢解析一下这个内存上下文。

2. 内存上下文(MemoryContext)是什么

内存上下文是一种内存管理机制。通俗一点来说,内存上下文可以看作是内存块和操作该内存块的方法的一个集合。举个例子,有一种内存上下文叫MemoryContextA,如果用户切换到MemoryContextA的话,那么接下来的操作至少会遵循以下2个规则。

1) 申请的内存都是属于MemoryContextA,并且这些内存也会随着MemoryContextA的删除而被删除掉。

2) 操作内存(申请、释放、重分配等等)都是由MemoryContextA定义的方法来执行。


AntDB中存在很多内存上下文,在它们之间会建立如图3所示的树形关系。(同一层之间其实还有兄弟关系,本图为了突出树形的层级关系,未在图中标识出兄弟关系。)

图3:内存上下文树形关系

3. 为什么要引入内存上下文

C/C++程序的开发者对内存操作这一部分(特别是内存的申请/释放操作)肯定深有体会,其中内存泄漏的问题更是家常便饭。尤其是当我们使用传统的内存操作方式来开发一个大型的软件(系统)时,保证内存操作不会出问题是相当有挑战的,并且这也会造成更多的开发成本。

AntDB引入内存上下文机制后,可以使得我们不用在意每一处内存的申请/释放,也让内存管理工作变得更加清晰、方便、可靠。

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

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

相关文章

msyql迁移到人大金仓数据库

1,点击数据迁移工具 2,在浏览器上输入http://localhost:54523,默认账号和密码为kingbase,kingbase,进入之后,就是项目的页面 3,数据库管理 添加源数据库,点击确定就可以了,也可以测…

鸿蒙问题之本地模拟器无法识别

今天按例打开本地模拟器,发现DevEco Studio不能检测到我的本地模拟器了。 重启了DevEco Studio和模拟器多次都无果。果断删除模拟器 然后创建一个新的,就可以成功检测到了。这应该是idea的一个bug

反编译会遇到哪些难题

反编译是把已编译的程序代码还原成源代码的过程,是软件逆向工程中重要的一环。反编译可以帮助开发者快速理解和修改已有的程序,也可以帮助安全专家发现程序中的漏洞。但是反编译也存在许多挑战和难题。下面简单的从几个方面了解一下反编译会遇到的难题。…

【Nodejs】基于Promise异步处理的博客demo代码实现

目录 package.json www.js db.js app.js routes/blog.js controllers/blog.js mysql.js responseModel.js 无开发,不安全。 这个demo项目实现了用Promise异步处理http的GET和POST请求,通过mysql的api实现了博客增删改查功能,但因没有…

VR云游开启智慧旅游新纪元,打造“云旅游”新模式

元旦假期,全国文化和旅游市场平稳有序,家人和亲友的出游趋势稳步增加,演唱会、音乐节、跨年等活动的叠加让元旦出游更加吸引游客。在冰雪旅游热度持续攀升的时候,许多年轻群体已经开始使用VR云游进行智慧景区旅游,身临…

作业--day41

利用模板类完成顺序表 #include <iostream>using namespace std;//模板类 template <typename T> class SeqTab{T arr[20];int maxsize; public:SeqTab():maxsize(0){}void Insert(T a);void Search(T a);void Delete(int index);void Show(); };//尾插 template …

bullet3 三种碰撞检测及实现

Bullet 物理引擎是一个专业的开放源码的碰撞检测&#xff0c;刚体和柔体动力学库。Bullet 物理引擎目标是实时和交互使用在游戏&#xff0c;电影和机器人的视觉效果。自由zlib授权的商业使用库。 bullet3的三种碰撞检测 以下三种方式都是可以达到碰撞检测的效果&#xff1a; …

新能源汽车@2023/24:卷价格、拼智能与生态战

【潮汐商业评论/原创】 2023年末尾&#xff0c;受到大众广泛热议的小米汽车发布会“姗姗来迟”&#xff0c;也为“乱战”中的2023新能源汽车市场画上了一个句号。 然而&#xff0c;在雷军整整三个小时看似平和的演讲与技术讲解中&#xff0c;实则在电机、智驾、智舱等核心技术…

多元线性回归案例--客户价值模型

文章目录 step 1&#xff1a;读取数据step 2&#xff1a;搭建模型step 3&#xff1a;构造回归方程step 4&#xff1a;评估模型 利用多元线性回归模型可以根据多个因素来预测客户价值&#xff0c;当模型搭建完成后&#xff0c;便可对不同价值的客户采用不同的业务策略。 这里以信…

C#高级语法 Attribute特性详解和类型,方法,变量附加特性讲解

文章目录 前言相关资料Attribute特性个人原理理解特性的声明与使用类型特性运行结果&#xff1a; 找到类的Attribute属性方法特性和变量特性代码封装测试类TestService1TestService2TestService3 测试代码运行结果 对封装的代码进行优化封装代码测试代码运行结果&#xff08;和…

雾天条件下 SLS 融合网络的三维目标检测

论文地址&#xff1a;3D Object Detection with SLS-Fusion Network in Foggy Weather Conditions 论文代码&#xff1a;https://github.com/maiminh1996/SLS-Fusion 论文摘要 摄像头或激光雷达&#xff08;光检测和测距&#xff09;等传感器的作用对于自动驾驶汽车的环境意识…

3D 纹理的综合指南

在线工具推荐&#xff1a;3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 我们经常看到超现实主义的视频游戏和动画电影角色出现在屏幕上。他们皮肤上的…

在win10上cuda12+tensorrt8.6+vs2019环境下编译paddle2.6生成python包与c++推理库

paddle infer官方目前没有发布基于cuda12的c库&#xff0c;为此参考https://www.paddlepaddle.org.cn/inference/user_guides/source_compile.html实现cuda12的编译安装&#xff0c;不料博主才边缘好自己的paddle2.6&#xff0c;paddle官方已经发布了cuda12.0的paddle2.6框架。…

嵌入式MCU:如何安装codeWarrior 和Jlink

先安装codeWarrior 15.0版本,这个官网上没有这个版本要去blazar的这个网站上下载: Blazar-α系统电路图纸(MOOC课程对应)(Updating)-Blazar开源硬件与MOOC codeWarrior 安装不要安装在中文路径里面 安装完了codeWarrior 再安装Jlink 然后再装Jlink 这个也是从上面的…

Android 内容生成pdf文件

1.引入itext7 implementation com.itextpdf:itext7-core:7.1.13上面比较大&#xff0c;可以直接下载需要集成的jar包 implementation files(libs\\layout-7.1.13.jar) implementation files(libs\\kernel-7.1.13.jar) implementation files(libs\\io-7.1.13.jar) implementatio…

《MySQL系列-InnoDB引擎04》MySQL表相关介绍

文章目录 第四章 表1 索引组织表2 InnoDB逻辑存储结构2.1 表空间2.2 段2.3 区2.4 页2.5 行2.6 拓展&#xff1a;MySQL的varchar(n)能存储几个字符&#xff1f;占多少字节&#xff1f; 3 InnoDB行记录格式4 文件格式5 约束5.1 数据完整性5.2 约束的创建和查找5.3 约束和索引的区…

如何为项目创建高效的项目进度表?

项目管理是一项负有巨大责任的工作&#xff0c;涉及到完成项目所需的大量流程和任务。如果没有任务和责任的线路图&#xff0c;很容易就偏离方向&#xff0c;无法了解项目每个阶段需要完成的任务。这就是为什么项目进度表是成功执行项目的核心所在。 什么是项目进度表&#xff…

数据分析-24-母婴产品电商可视化分析(包含代码数据)

文章目录 0. 代码数据获取1. 项目1.1 项目介绍1.2 分析目的1.3 分析思路 2. 数据集介绍2.1 数据信息2.2 字段含义 3. 数据清洗3.1 导入包和查看数据3.2 查看列的信息3.3 查看表平均值这些3.4 查出重复的user_id3.5 清洗buy_mount列 4. 针对目的进行分析4.1 销量数量前10的类别I…

T40N 君正智能处理器T40 BGA 芯片

T40N是一款智能视频应用处理器&#xff0c;适用于移动摄像机、安防等视频设备调查、视频聊天、视频分析等。该SoC引入了一种创新的体系结构满足高性能计算和高质量图像和视频编码的要求通过视频设备解决。T40N提供高速CPU计算能力&#xff0c;出色的图像信号过程中&#xff0c;…

ensp vlan连接(详细)

1.将需要的设备放置好 2.将设备连接起来 3.启动所有设备 4.备注好每台PC机的信息 5.配置好每台PC机 6.配置交换机1 进入配置视图&#xff0c;关闭信息提示 重命名设备 批量创建VLAN 开始配置接口 更改接口类型为ACCESS 将接口划分到对应的VLANN 配置下一个接口&#xff0c;步…