位置: 编程技术 - 正文

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数据库随机取数据)

  • 已交税金是什么类
  • 资本公积不足冲减是什么意思
  • 多少金额以下可以一次性费用
  • 清包工取费标准
  • 小规模超过10万是全额交税吗
  • 油费补贴计入什么科目
  • 个税申报的收入是应发工资还是实发工资
  • 小规模旅行社差额征税的账务处理
  • 新企业需要结转增值税吗
  • 个人设备投资需要交税吗
  • 怎么算应纳企业所得税
  • 外购货物用于捐赠的会计分录
  • 企业贷款发生的利息、手续费
  • 民事诉讼的适用范围具体包括哪些案件
  • 免税销售额怎么算出来的
  • 用户风险是什么意思
  • 问10个问题
  • 对公账户注销需要本人吗
  • 当进项大于销项需要做账务处理吗?
  • 为什么利息收入是负数
  • 汇算清缴的年报在哪里查询
  • 增值税纳税申报表在哪里打印
  • 代理费是指
  • 英雄联盟登录失效怎么回事
  • win11正式版问题
  • 高新企业认定后研发费用比例
  • php实现验证码功能
  • layui iconfont
  • 双层for循环的程序流程图
  • 计算完工产品成本
  • 投资收益是否缴增值税
  • 外资企业注册资本认缴制期限
  • php使用教程
  • 资本公积属于谁
  • 机票报销需要哪些才可以
  • 14个Python处理Excel的常用操作,非常好用
  • 现金日记账每月都做本年累计数吗?
  • 赠品视同销售会计分录要如何编制?
  • 快递破损后赔偿还能把东西拿走吗
  • 织梦官方网站
  • mongodb添加数据
  • 公账转给员工工资情况说明怎么写
  • 个体户交个税新政策
  • 经营活动现金流量比率
  • 定额的个体户怎么交税
  • 个人所得税申报截止时间
  • 工会经费绩效
  • sql server 性能优化
  • 技术服务费计入成本会计分录
  • 信用卡产生滞纳金
  • 权益净利率计算公式产权比率
  • 装修属于营业费用还是管理费用
  • 加盟费收入需要纳税吗
  • 金税盘清卡怎么操作视频
  • 个人出租租房收什么税
  • 研发支出资本化支出在资产负债表哪里体现
  • 进项和销项必须一致才能抵扣吗
  • mysql5.7.19 zip 详细安装过程和配置
  • 组策略禁止打开文件对话框输入路径
  • macbookpro日历
  • 怎么在win7开始菜单添加文件夹
  • WinXP巧用Netsh工具快速填写IP参数
  • ubuntu下载安装QQ的命令
  • Win8开启SmartScreen筛选器保护上网安全
  • win7电脑启动
  • 局域网扫描器
  • perl随机数
  • unity碰撞得分代码
  • 老生常谈的道理
  • linux修改磁盘格式指令
  • linux保存
  • Xamarin.Android 入门开发
  • 利用python绘图
  • 用javascript
  • 一种新的运算符号类型的题
  • python电话本
  • python怎么定义
  • boost源码编译
  • 广东税务增值税发票查验平台
  • 电信业八大争议事件
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设