位置: 编程技术 - 正文

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

  • 增值税为什么不重复征税
  • 报税是怎么操作的
  • 二手车需要交哪些额外的钱
  • 其他综合收益属于当期损益吗
  • 经营用的电饭锅有哪些
  • 代收代付保险费的差额可以放入营业外收入么
  • 开了票印花税必须报吗
  • 专用发票不抵扣怎么做账
  • 专用发票二维码压线
  • 保险企业汇算清缴规定
  • 企业购车保险费怎么做会计分录
  • 固定资产之前没提折旧,数额交大
  • 增值税普通发票怎么开
  • 个税提前预缴怎么入账?
  • 对于甲供工程,施工方销售额不包括建设方提供的材料款。那么该销售额是否包括设备及动力款?
  • 关于促进房地产市场健康发展的实施意见(试行)
  • 补偿金需要缴纳个税分开
  • 当月开票一定要当月入账吗
  • 减少注册资本金程序
  • 收到认证费用计入什么科目
  • 苹果电脑怎么截屏ctrl加什么
  • u盘的内存卡怎么装
  • win11怎么压缩图片画质
  • thinkphp获取数据库数据
  • 小规模年底税金怎么算
  • 计提下个月工资怎么做
  • win7旗舰版系统怎么样
  • 显示器有必要买240hz吗
  • php stl
  • 个人所得税必须交吗
  • 监狱劳教企业是国企吗
  • 所得税返还计入什么科目
  • 延期收款利息如何缴税
  • 深度学习实战10-数学公式识别-将图片转换为Latex(img2Latex)
  • 现金流量表相关题目
  • 异地提供建筑服务预缴企业所得税
  • 计算机视觉项目文档
  • 怎样计提购销合同印花税
  • 汇算清缴所得税是什么意思
  • 全年一次性奖金单独计税还是并入
  • 现代服务增值税纳税义务发生时间
  • 交去年企业所得税怎么做资产负债表
  • java 读写锁 map
  • python科学计算库有哪些
  • 营改增分录
  • vue2响应式原理面试回答
  • 税务申报核定销售额在哪填写
  • 用友要怎么删除凭证
  • 计税工资什么意思2019
  • 增值税附加申报表怎样填小规模
  • 鲜花虫草开发票属于什么类别?
  • 电子发票可以作为保修凭证吗
  • 没有计提坏账如何做账
  • 公司购买一辆小型货车
  • 低值易耗工具有哪些
  • 当月工资总额如何计算
  • 未开票收入怎么报税
  • 经营活动产生的现金流量净额越大越好吗
  • 装修费用怎么结算
  • 怎样计算加班工资?
  • 自制半成品核算方法
  • linux lftp命令
  • win7麦克风没声音怎么设置方法从计算机
  • macbookair屏幕变成横版
  • linux修改密码认证令牌错误
  • hptlbxfx.exe
  • win8.1安装更新卡住
  • win8.1 应用商店是不是不能用了
  • win7系统更新补丁会解决游戏卡顿的问题吗
  • windows7开机显示错误恢复进不去
  • linux系统怎么复制文件到u盘
  • cocos creator 发布web
  • 红宝书csv
  • json jquery
  • 深入理解计算机系统 电子书
  • Unity3D游戏开发(第2版)
  • 什么是跨地区经营汇总纳税企业
  • 进口消费税怎么入账
  • 飞机票其他税费包括什么内容
  • 国家税务总局2016年17号公告
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设