位置: 编程技术 - 正文

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

  • 递延所得税资产和递延所得税负债
  • 承租方支付租房税费
  • 增值税销项税额账务处理
  • 销售固定资产清单怎么做
  • 银行询证函快递怎么查
  • 无形资产减值损失一经确认在以后期间不得转回
  • 进口设备消费税税率是多少
  • 饮料工业发展前景如何
  • 单位班车费用是福利费吗
  • 超30日未备案
  • 没有资质的建筑公司怎样接工程
  • 异地缴纳个人所得税
  • 公司是否可以开电子发票
  • 通信服务费可以取消吗
  • 7.1发票没有税号怎么开
  • 增值税专用发票验票
  • 受让无形资产是什么意思
  • 节日现金福利征收个人所得税吗
  • 预警期内的应收账款管理
  • 资产负债表其他应付款包括哪些
  • 商业承兑汇票到期日付款人账户不足付款时
  • 民间非营利组织会计制度最新版
  • 固定资产清理账户期末有余额吗
  • 1697510586
  • 银行利息为什么只算10个月
  • 补税后算偷税漏税吗
  • 不予抵扣的进项税额是什么意思
  • PHP+Mysql+jQuery查询和列表框选择操作实例讲解
  • linux系统中如何查看日志
  • 拆迁货币什么意思
  • php socket_write
  • yii框架怎么样
  • thinkphp3.0
  • ThinkPHP中Common/common.php文件常用函数功能分析
  • 云服务器远程端口
  • modprobe operation not permitted
  • python处理mysql如何拿到表头
  • 企业待报解预算收入的分录
  • 报表中库存商品怎么填
  • 逾期未收回包装物押金会计分录
  • 银行利息的收入计入什么科目
  • mongodb 聚合
  • Apache RocketMQ 5.0 笔记
  • 小规模纳税人收入超过500万怎么办
  • 2021新旧会计准则的比较分析
  • 未收回的货款属于什么会计科目
  • 如何利用远期交易保值
  • 税法中对差旅费的处理
  • 个体户是什么样的
  • 视同销售的增值税是如何计算?
  • 什么情况下借递债券
  • 法人如何网上申请辞职手续
  • 留抵增值税怎么填列
  • 办公室购花卉会计处理
  • 残疾人残保金如何计算
  • 固定资产盘亏造成的损失计入什么科目
  • 购入产品用作样品怎么做
  • 自建的固定资产折旧计入哪里
  • 预付账款转营业外支出
  • 印花税为什么不用计提
  • 年度纳税总额包括个税吗
  • windows mysql1045
  • mysql 临时表
  • window所有程序在哪里
  • win7手动装系统步骤
  • win10无法收到wifi
  • mac登录apple id一直转圈
  • win7 0x80070002处理方法
  • 笔记本电脑显示英特尔服务未在运行
  • win7移动软件
  • linux安全加固的内容是什么
  • 批处理命令显示内容
  • vr project
  • unity3d武器模型
  • js如何实现图片懒加载
  • android线程状态
  • 税务局电话客服人工服务
  • 北京税务局发票查询
  • 税友核心价值观
  • 小区活动宣传文案
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设