位置: 编程技术 - 正文

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

  • 筹建期间的会计分录
  • 公司从业人员包括老板吗
  • 房地产中介门头
  • 营业成本在资产负债表哪里
  • 房地产公司销售商品房属于增值税征收范围吗
  • 发出材料是借还是贷
  • 企业合并怎么做账
  • 冲销管理费用如何计算
  • 结转安装费用的会计分录
  • 付现金给别的公司是否可以开具发票呢?
  • 不是企业性质的民办学校要交什么税
  • 印花税票计税依据含税吗?
  • 发票已经开但是没有收到发票怎么做
  • 营改增后物业管理公司需要交营业税吗
  • 异地劳务公司所在地怎么交税
  • 财政部2019年39号第七条
  • 以前年度收入调整账务处理怎么做
  • 酒店优惠券财务如何记账?
  • 残保金中的工资总额在哪看
  • 在linux中使用什么命令可以动态查看文件内容
  • 民办学校的财务制度
  • 购入固定资产后发生的员工培训费应计入固定资产的成本
  • php的数组函数
  • 交易性金融资本
  • 预防cpu被烧毁的办法
  • csrrs.exe
  • gcasSWUpdater.exe是什么进程 有什么作用 gcasSWUpdater进程查询
  • 退伍兵自谋职业后被单位辞退怎么办
  • PHP:imagecopymerge()的用法_GD库图像处理函数
  • laravel5.4生成验证码的代码
  • 小规模纳税人会计分录
  • 减值准备对方科目不能是固定资产
  • 北京猿创源科技有限公司
  • 外汇申报中付款什么意思
  • php返回数据给ajax
  • elemental ui
  • springboot比spring做了哪些改进
  • ai 绘画原理
  • 微信自定义菜单在哪里
  • dpkg命令详解
  • autocut跟踪调节
  • discuz去除底部
  • 外购商品用于赠送增值税可以抵扣么
  • 二手车交易发票怎么收费
  • okhttp3源码分析
  • mysql日志文件在哪里
  • 定额发票验旧日期怎么算
  • sql 附加数据库
  • 筹建期间的开办费为什么不属于资产
  • 融资性售后回租承租方为什么不交税
  • 合伙企业一般纳税人六税两费
  • 补助资金如何做账
  • 当月作废的专票还是要交增值税吗
  • 留抵税额和待抵扣进项税额区别
  • 小规模公司开票税率是多少
  • 长期股权投资减值准备是什么意思
  • 国内旅客运输票据可以抵扣进项税吗
  • 会计凭证装订的注意事项
  • 收到伙食费的会计处理
  • mysql8.0免安装
  • win7开机taskeng
  • 安装freebsd
  • xp系统如何设置
  • mac怎么添加桌面
  • linux应对攻击的防御手段
  • xp系统电脑开机密码忘记了
  • win10正版授权图标
  • windows7电脑无法正常运行
  • opengl实现光照效果
  • gpio接口
  • jQuery实现Tab选项卡切换效果简单演示
  • chrome heat
  • bootstrap入门教程
  • js怎么设置css
  • 传智播客在线课程
  • android学什么
  • python 备份文件夹
  • 湖州市2020年最低生活保障
  • 国税局黑龙江省
  • 印花税属于什么业务类型
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设