位置: 编程技术 - 正文

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常用的命令大全
  • 鸿蒙的usb调试
  • 鸿蒙怎么开启个性化桌面
  • 车辆保险费计入车辆的入账成本吗
  • 怎么补去年的税
  • 外贸综合服务企业代办退税
  • linux中的
  • 病毒变种太多
  • 取得普通发票与专票区别
  • 微信小程序完美修真攻略
  • 中拍网拍卖
  • 违约金要计入应纳税所得额吗
  • 发票联和抵扣联区别
  • 小程序uniacid
  • 设备 融资租赁
  • phpcms插件
  • ibm_db_dbi
  • nosql sql
  • 动态sql怎么执行
  • 小规模纳税人劳保用品可以抵扣吗
  • 免税农产品发票怎么抵扣申报
  • 用友t3财务软件价格表
  • 买房返现是什么意思
  • 出口不报关怎么收款
  • 契税通过应交税费科目核算吗
  • 置换房产入账价值的确定根据什么
  • 固定资产和无形资产折旧时间起始
  • 有限合伙企业的
  • 如何冲销应付账款
  • 融资租赁取得的机器设备的账务处理
  • 递延所得税资产和所得税费用的关系
  • 将税后利润首先用于增加投资
  • 购买股票如何操作
  • 辞退员工 工资
  • 一个会计每个月平均有多少钱
  • mysql unique option prefix myisam_recover instead of myisam-recover-options的解决方法
  • sql server数据存放位置
  • 怎么去掉0前面的逗号
  • sqlserver用户权限不给增删查改表结构权限
  • 使用u盘安装win10
  • U盘安装ubuntu的分区详细教程
  • ubuntu系统怎么用
  • 怎样加快电脑开机速度
  • macbook新手
  • centos删除virbr0
  • exceltype函数的用法
  • jquery左滑切换
  • unity learn premium
  • 只用html和css
  • unity如何得到输入框的输入
  • js实现物体移动
  • js代码生成
  • nodejs集成sqlite使用示例
  • 浅谈一下新冠的好处
  • unity2018.4破解
  • 如何用python写自动化脚本
  • 深圳如何打印个人参保证明
  • 深圳税务网上服务大厅官网
  • 税务稽查工作底稿属于什么证据
  • 公积金扣800一个月多少钱
  • 房地产企业所得税确认收入时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设