位置: 编程技术 - 正文

MySQL MEM_ROOT详解及实例代码

编辑:rootadmin

推荐整理分享MySQL MEM_ROOT详解及实例代码,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

MySQL MEM_ROOT详解

这篇文章会详细解说MySQL中使用非常广泛的MEM_ROOT的结构体,同时省去debug部分的信息,仅分析正常情况下,mysql中使用MEM_ROOT来做内存分配的部分。

在具体分析之前我们先例举在该结构体使用过程中用到的一些宏:

下面再来看看MEM_ROOT结构体相关的信息:

以下是分配具体的block信息.

其实MEM_ROOT在分配过程中,是通过双向链表来管理used和free的block:

MEM_ROOT的初始化过程如下:

初始化过程中,block_size空间为block_size-ALLOC_ROOT_MIN_BLOCK_SIZE。因为在内存不够,需要扩容时,是通过mem_root->block_num >>2 * block_size 来扩容的,所以mem_root->block_num >>2 至少为1,因此在初始化的过程中mem_root->block_num=4(注:4>>2=1)。

下面来看看具体分配内存的步骤:

上述代码的具体逻辑如下:

MySQL MEM_ROOT详解及实例代码

1.查看free链表,寻找满足空间的block。如果找到了合适的block,则:

1.1 直接返回该block从size-left处的初始地址即可。当然,在free list遍历的过程中,会去判断free list中第一个block中left的空间不满足需要分配的空间,且该block中已经查找过了次(ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP)都不满足分配长度,且该block剩余空间小于4k(ALLOC_MAX_BLOCK_TO_DROP),则将该block 移动到used链表中。

2.如果free链表中,没有合适的block,则:

2.1 分配 mem_root->block_size * (mem_root->block_num >> 2)和length+ALIGN_SIZE(sizeof(USED_MEM))中比较大的作为新的block内存空间。

2.2 根据该block的使用情况,将该block挂在used或者free链表上。

这里需要注意的是二级指针的使用:

prev指向的是最后一个block的next指向的地址的地址:

所以将prev的地址替换为new block的地址,即将该new block加到了free list的结尾:*prev=next;

总结:

MEM_ROOT的内存分配采用的是启发式分配算法,随着后续block的数量越多,单个block的内存也会越大:block_size= mem_root->block_size * (mem_root->block_num >> 2) .

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

MySQL 随机函数获取数据速度和效率分析 在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使

mysql group by having 实例代码 mysqlgroupbyhaving实例注意:使用groupby的时候,SELECT子句中的列名必须为分组列。如下实例必须包括name列名,因为name是作为groupby分组的条件。实例:我的

php mysql insert into 结合详解及实例代码 phpmysqlinsertinto结合详解ySQLINSERTINTO语句在实际应用中是经常使用到的语句,所以对其相关的内容还是多多掌握为好。向数据库表插入数据INSERTINTO语句用

标签: MySQL MEM_ROOT详解及实例代码

本文链接地址:https://www.jiuchutong.com/biancheng/349301.html 转载请保留说明!

上一篇:服务器数据库编码格式问题解决方案(数据库服务器配置方案)

下一篇:MySQL 随机函数获取数据速度和效率分析(mysql数据库随机取数据)

  • 小规模纳税人如何做账
  • 税务机关如何处理公司多交税
  • 缴纳附加税会计科目怎么做
  • 营业外支出为负数怎么处理
  • 小规模纳税人一个季度多少免税
  • 出口企业免抵税额要作进项转出吗
  • 农产品收购发票可以跨区域开吗
  • 防伪税控开具发票明细表
  • 可交换债券与可转换债券的区别在于
  • 哪些银行承兑汇票不能收的名单
  • 收款未发货需要纳税吗
  • 为什么要抵消损益
  • 增值税普通发票有什么用
  • 增值税免税收入进项税额转出
  • 非居民企业指定扣缴合同备案
  • 房地产所得税税负率计算公式
  • 未担保余值是什么意思
  • 支付行业招商方案
  • 个税专项附加扣除是什么意思
  • 企业所得税的计算公式及实例
  • 房地产开发成本测算套表(全过程)
  • windows11开始菜单点击没反应
  • 查补以前年度房产税的账务处理
  • 施工企业内部往来核算方法包括( )
  • searchnav.exe - searchnav是什么进程 有什么用
  • 坏账准备期末余额怎么计算
  • 贷款损失准备是什么类科目
  • nicconfigsvc.exe - nicconfigsvc是什么进程 有什么用
  • 二手房房屋买卖注意哪些问题
  • 客户抽奖活动方案
  • React hooks中 useState踩坑-=--异步问题
  • php curl代理
  • 基于Java+SpringBoot+Vue前后端分离仓库管理系统设计实现
  • roc曲线绘制r语言
  • 代扣代缴境外增值税税率是多少
  • 小型微利企业增值税优惠政策2023最新
  • 代扣代缴的境外收入企业所得税可以抵减吗
  • 个人账户收到多少钱会被监控
  • php5.2漏洞
  • 企业购买商铺会查征信吗
  • 年终企业所得税怎么结转
  • 数据库管理中负责数据模式定义的数据库语言是
  • 织梦标签教程
  • 员工差旅费报销会计分录
  • 个人独资企业的
  • 从物资公司购入原木的进项税额
  • 设计协会会长
  • 股利分配是什么科目
  • 信用卡逾期滞纳金怎么收取
  • 备用金被盗刷了怎么办
  • 补交以前年度环保税
  • 固定资产融资租出对应入账科目
  • 研发使用的设备有哪些
  • 上市公司固定资产增加是好事吗
  • 新开公司没有领失业金
  • 在建工程的人工费会计分录
  • 五险一金怎么用呢
  • mysql多表连接的方式
  • mysql中文乱码解决的命令
  • 升级打装备的手游
  • window系统大全
  • winxp开机界面后老重启
  • win7界面比win10好看
  • win10系统下如何打开internet(ISS)信息服务
  • win8.1 应用商店是不是不能用了
  • win10如何进行运行
  • linux cpan
  • unity 漫反射
  • java timer
  • unity3d 代码
  • linux进程管理命令使用
  • 带你了解处女座
  • 从零开始学什么
  • 原生js常用的方法
  • unity3d 赛车游戏
  • 安卓源代码开放吗
  • 基于javascript的毕业设计选题
  • js对象判断
  • android实时获取微信聊天信息
  • 中国税务的核心价值观是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设