AntDB内存管理之内存上下文

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBean的生命周期

SpringBean Bean的生命周期 1、首先需要明确bean对象与普通对象的区别: 对于普通的 Java 对象,当 new 的时候创建对象,然后该对象就能够使用了。一旦该对象不再被使用,则由 Java 自动进行垃圾回收。 而 Spring 中的对象是 bean,…

Gin 路由注册与请求参数获取

Gin 路由注册与请求参数获取 文章目录 Gin 路由注册与请求参数获取一、Web应用开发的两种模式1.前后端不分离模式2.前后端分离模式 二、RESTful介绍三、API接口3.1 RESTful API设计指南3.2 API与用户的通信协议3.3 RestFul API接口设计规范3.3.1 api接口3.3.2 接口文档&#xf…

C++_模板

目录 1、函数模板 1.2 模板原理 2、多个模板参数 3、模板的显示实例化 4、模板的匹配 5、类模板 结语: 前言: 在C中,模板分为函数模板和类模板,而模板的作用就是避免了重复的工作,把原本是程序员要做的重复工作…

内网DNS隐蔽隧道搭建之iodine工具

iodine iodine是基于C语言开发的,分为服务端和客户端。iodine支持转发模式和中继模式。其原理是:通过TAP虚拟网卡,在服务端建立一个局域网;在客户端,通过TAP建立一个虚拟网卡;两者通过DNS隧道连接&#xf…

YACS(上海计算机学会竞赛平台)2023年12月月赛——移动复位

移动复位 内存限制: 256 Mb时间限制: 1000 ms 题目描述 二维平面上有一个点。该点最初所在的位置称之为起点。接下来,该点接受了一串命令,每个命令可以用一个大写字母表示: R 表示该点沿 X 轴坐标正方向移动了一个单位;L 表示…

AI实景无人直播创业项目:开启自动直播新时代,一部手机即可实现增长

在当今社会,直播已经成为了人们日常生活中不可或缺的一部分。无论是商家推广产品、明星互动粉丝还是普通人分享生活,直播已经渗透到了各行各业。然而,传统直播方式存在着一些不足之处,如需现场主持人操作、高昂的费用等。近年来&a…

CentOs 环境下使用 Docker 部署 Ruoyi-Vue

CentOs 环境下使用 Docker 部署 Ruoyi-Vue RuoYi-Vue 项目下载地址 RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本 (gitee.com) Docker 部…

x-cmd pkg | tig - git 文本模式界面

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 tig 由 Jonas Fonseca 于 2006 年使用 C 语言创建的 git 交互式文本命令行工具。旨在开启交互模式快速浏览 git 存储库的信息以及 git 命令的运行。 首次用户 使用 x tig 即可自动下载并使用 在终端运行 eval "…

NeurIPS上新 | 从扩散模型、脑电表征,到AI for Science,微软亚洲研究院精选论文

编者按:欢迎阅读“科研上新”栏目!“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里,你可以快速浏览研究院的亮点资讯,保持对前沿领域的敏锐嗅觉,同时也能找到先进实用的开源工具。 本期“科研上新…

项目框架构建之6:编写通用主机基础类

本文是“项目框架构建”系列之6,本文介绍如何编写通用主机基础类。 1.为了构建通用主机,我们先创建主机接口IAppHost接口 接口需要有配置项,我们定义为HostConfiguration,比如我们希望用户可以设定他的工作目录,就可…

GLEE:一个模型搞定目标检测/实例分割/定位/跟踪/交互式分割等任务!性能SOTA!

GLEE,这是一个面向目标级别的基础模型,用于定位和识别图像和视频中的目标。通过一个统一的框架,GLEE实现了对开放世界场景中任意目标的检测、分割、跟踪、定位和识别,适用于各种目标感知任务。采用了一种协同学习策略,…

C之BS开发

一、 BS 概述与 boa 搭建 1.1 BS 模式开发概述 BS 模式: 浏览器与服务器模式, 即通过浏览器访问服务器的 Web 资源。 1.1.1 web 前端开发技术 主要包含: HTML 、 CSS 、 XML/JSON 、 Javascript 、 AJAX HTML 超文本标记语言 ( 英文全称…

华为欧拉安装部署:Oracle11g

一、环境准备 1、下载安装低版本的libaio包;libaio版本太高,会造成编译错误 查看libaio1库版本不能大于0.3.109 [oracles3 install]$ rpm -qa libaio libaio-0.3.110-12.el8.x86_64# 查看欧拉操作系统版本 [oraclelocalhost bin]$ cat /etc/os-release…

stable diffusion 基础教程-提示词之艺术风格用法

展现夕阳 golden hour, (rim lighting):1.2, warm tones, sun flare, soft shadows, vibrant colors, hazy glow, painterly effect, dreamy atmosphere阴影 chiaroscuro, (high contrast):1.2, dramatic shadows, bold highlights, moody atmosphere, captivating inte…

5-sql注入之文件读写

文章目录 SQL注入之文件读写1、文件读写注入的原理2、文件读写注入的条件读取文件写入文件 SQL注入之文件读写 1、文件读写注入的原理 就是利用文件的读写权限进行注入,它可以写入一句话木马,也可以读取系统文件的敏感信息。 2、文件读写注入的条件 …

02 Deep learning algorithm

Neural Networks target: inference(prediction)training my own modelpractical advice for building machine learning systemdecision Tress application: speech(语音识别) ----> images(计算机视觉)—> t…

MS713/MS713T:CMOS 低压、4Ω四路单刀单掷开关,替代ADG713

产品简述 MS713/MS713T 是一款单芯片 CMOS 4 路可选择开关,具有低 功耗、高开关速度、低导通阻抗、低漏电和高带宽特性。其工作 电压范围是 1.8V 到 5.5V ,可以广泛应用在电池供电仪器仪表、新 一代的模数转换和数模转换系统中。其高带宽特性可用在 …

代码+视频,手把手教你R语言使用forestploter包绘制单组及双组森林图

森林图在论文中很常见,多用于表示多因素分析中的变量与结果变量的比值效应,可以用图示的方法比较直观的绘制出来。既往我们在文章《R语言快速绘制多因素回归分析森林图(1)》已经介绍了怎么绘制森林图,但是绘图比较简单…

SecOC中新鲜度值和MAC都按照完整的值来生成,但是在发送和认证的时候只会截取一部分。这边截取的部分一般取多长?由什么参数设定?

新鲜度值(Freshness Value, FV)和消息验证码(Message Authentication Code, MAC)是SecOC协议中用于保证数据的真实性和新鲜度的重要信息。它们的长度取决于不同的因素,如加密算法、安全级别、通信带宽等。 一般来说,FV和MAC的长度越长,安全性越高,但也会占用更多的通信…

Docker随笔

OverView 为什么需要Docker 如果我需要部署一个服务,那么我需要提前部署其他应用栈,不同的应用栈会依赖于不用的操作系统和环境。这样做会产生一些负面影响: 不同版本依赖较长的部署时间不同的Dev/Test/Prod环境 这时我们需要一个工具去解…