位置: 编程技术 - 正文

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

  • 一般纳税人的认定时间
  • 拿工资要开发票,发票去哪儿开?
  • 固定资产出售净残值怎么处理
  • 研发费用利润表中
  • 弥补以前年度亏损会计分录
  • 申报查询里面找不到才申报的个税
  • 公司账户拨款工具有哪些
  • 招待客人的场景图
  • 政府专项补助购置固定资产进项税可以抵扣吗?
  • 增值税调整后开具发票
  • 固定资产尚未投入怎么办
  • 私车公用税务政策性文件
  • 亏损企业股东年底借钱未还
  • 建筑业附加税税率是多少
  • 出纳记账本如何手工记账
  • 所得税报表怎么申报
  • 以旧换新增值税税率是多少
  • 应收账款坏账准备计算表
  • 应付职工薪酬会计科目怎么做
  • 无偿取得土地使用权的会计分录
  • 简易计税开票开成了一般计税的税率会比对不通过吗
  • 所有者权益类科目借贷方向
  • 电脑经常重新启动是什么原因
  • 收到上级工会下拨的工会经费
  • 上月预提的费用怎么记账
  • php怎么创建数据表
  • excel表格怎么自制表格
  • 戛纳,法国 (© Manjik Photography/Alamy)
  • kb4499164安装失败怎么办
  • 工业企业汽车发生费用处理
  • 一借多贷的会计分录怎么写
  • 什么是主营业务税金及附加
  • 应付职工薪酬的借方和贷方
  • vue中如何使用axios
  • 财税〔2017〕34号文件中提到的科技型中小企业是指哪种企业?
  • php jsonp
  • 公司采购一直没走对公付款怎么处理
  • 与下级往来账户贷方核算的内容有
  • 非房地产企业的基建管理办法
  • 现金存入银行如何做账
  • 五种差异化收费方式
  • 企业应交税金科目编码
  • 金蝶可以自动结转增值税吗
  • 税额四舍五入的差额0.03怎么调整
  • sql server触发器的作用
  • 外来原始凭证包括一次凭证,累计凭证和汇总凭证
  • 同一控制下合并冲减资本公积
  • 运动会活动奖品
  • 合伙企业的利润分配,合伙协议没有约定的
  • 进项税已认证未缴纳
  • 应交税费减免税款怎么结转
  • 不开发票的收入如何申报纳税?
  • 电子承兑汇票是24小时签收吗
  • 报关单不在海关信息中
  • 盈余公积现金流量表中应填入哪里呢
  • 机票行程单改签费抵扣 税务局
  • 会计账本怎么记账
  • 无形资产管理的特点
  • 租赁房屋期间发生事故谁负责
  • mysql5.7.17下载
  • mysql根据另一张表更新
  • mysql5.7.31安装
  • win8.1升级win10系统
  • win10预览版21390
  • windows 8.1 build 9600
  • windows 10预览版
  • 如何重装edge
  • ubuntu10.04 root的帐户启用方法
  • 删除隐藏文件命令
  • win8.1网络设置
  • node.js 10实战
  • shell怎么创建用户
  • shell读取文本内容到变量
  • androidstudio手机编程软件
  • 学习JavaScript事件流和事件处理程序
  • 仿京东商城源码
  • python中的文件
  • 美国纽约购物
  • 个人所得税工资达到多少才交税
  • 税务师怎么备考才能考过
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设