位置: 编程技术 - 正文

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

  • 主营业务成本借方表示什么意思
  • 个税申报可以去税务局吗
  • 期初和期末余额均在借方的账户,一般属于
  • 在建工程转入固定资产当月计提折旧吗
  • 视同销售货物缴纳增值税的有哪些?
  • 资产负债表损益表模板
  • 非增值税应税项目可以抵扣进项税吗
  • 税务记账保存多少年纳税人转小规模
  • 收到借款确认书模板
  • 押金无法退回
  • 混合销售行为如何界定
  • 计提递延所得税的会计分录
  • 增值税专用发票和普通发票的区别
  • 没有缴纳社保怎么开证明
  • 上个月申报错了怎么办
  • 增值税专用发票怎么开
  • 岗位津贴一定要发吗
  • 打井行业
  • 逃避缴纳税款征管法第几条
  • 印花税加工承揽税率
  • 房屋装修费用计算器
  • 季度利润表本月数和本年累计数
  • 企业计提的工资薪金支出可以在税前扣除
  • 新契税法还有优惠吗?
  • 企业出售已使用过的固定资产税率
  • 公立医院规章制度
  • 收到免税苗木发票怎么做账
  • 公司年检需要什么资料
  • 社保退回的钱怎么做会计分录
  • 惠普台式电脑配置及价格
  • 清理缓存网页电脑
  • 防疫物资费用会计处理
  • 补税后算偷税漏税吗
  • 在linux操作系统中
  • php 钩子
  • owmngr.exe - owmngr是什么进程 作用是什么
  • 解决的英文
  • php实现搜索的方式
  • vue axios 拦截器
  • 支票的提示付款期限为自出票日期
  • yum安装php5
  • php互换两个变量的关系
  • patriotic研究
  • collection的属性
  • 计算md5值命令
  • python输入三科成绩
  • kppw源码
  • dedecms怎么改图片
  • sql server 2008 新建数据库
  • 应付账款主要账户有哪些
  • 其他应收款余额在贷方什么意思
  • 物流公司卖车合法么
  • 按差额征税
  • 专票已认证还能作废吗
  • 装修费一定要摊销吗
  • 预付账款写到什么凭证
  • 企业会计制度对固定资产无入账价值怎么入账
  • 固定资产一次性扣除申报表怎么填
  • 记账凭证先写借方还是贷方
  • 明细分类账三栏式
  • 资产减值损失是费用吗
  • Windows10 64位安装MySQL5.6.35的图文教程
  • Win10 Mobile/PC RS2快速预览版14926同步推送
  • psdrvcheck.exe - psdrvcheck是什么进程 有什么用
  • linux共享内存同步机制
  • win8系统ie浏览器最高多少
  • win8出现问题需要重启
  • unity团队
  • python迭代器iterator
  • unity怪物自动攻击
  • json与对象的区别
  • js.ajax
  • jquery属性选择器,选取所有带href
  • android强制关机
  • 日历 caldav
  • 江苏税务电子税务局电话号码
  • 甘肃国家税务总局
  • 开票盘注销后能否撤回
  • 税收助力双创
  • 河南省2020年12月纳税申报截止日期
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设