位置: 编程技术 - 正文

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

  • 企业收到购买标书的增值税专用发票可以抵扣吗?
  • 产权转移书据印花税包括什么
  • 电子税务局增值税发票系统
  • 发票已经做账但要退款账不平咋办
  • 服装企业销售方式
  • 银行卡酒店消费有记录吗
  • 房地产开发企业预缴增值税
  • 仲裁费用计入什么会计科目
  • 缴纳增值税金税率是多少
  • 装修改造费用按多少年摊销
  • 预收账款核算内容是什么
  • 企业土地是不是都应该缴纳房产税?
  • 企业拆迁补偿款要交税吗
  • 资产负债表属于会计报表吗
  • 酒店的床和沙发哪个好
  • 纳税申报有哪些规定
  • 企业代收代支的非税收入需要缴税吗?
  • 个人独资企业办收款码
  • 股权转让怎么交个人所得税
  • 实收资本不变说明了什么
  • 财务报告成本
  • 材料成本的核算方法有哪些
  • 存出投资款是什么凭证
  • 上个月的流量这个月可以用吗
  • 车间机物料消耗属于间接生产费用吗
  • 代建工地
  • windows10如何更改时间
  • 路由器2.4g和4g有什么区别
  • 网络不通怎么办苹果手机
  • 费用超额怎么写申请
  • 会计学中的折旧是什么意思
  • 莫纳皮拉
  • 员工购买住房公积金申请
  • php redis常用命令
  • 自建办公楼装修要报建吗
  • thinkphp with
  • 时间序列转换
  • vue设置背景图片透明度
  • php抢红包功能思路
  • vue3.0 main.js
  • day01-GUI坦克大战01
  • 小微企业免征增值税报表填写
  • 小规模企业利息收入要交税吗
  • 企业实际发生的与取得收入有关的支出
  • 契税属于哪种说法
  • 公对公的税票是怎么个流程
  • 设备调试费是什么税
  • mysql5.7.23安装配置教程
  • 购买债券的利息会计分录
  • 利润表的组成是指
  • 其他债权投资是长期投资吗
  • 国税局网上申报
  • 个人所得税孩子教育怎么申报
  • 税控盘服务费抵减增值税如何申报
  • 银行汇票的特点和用途
  • 所得税 补税
  • 用负数表示的例子
  • 一般纳税人购入不动产增值税税率
  • 事业单位收到发票怎么处理
  • 增值税进项税转出有哪些
  • 银行承兑汇票到期未承兑怎么办
  • 病假补贴需要什么手续
  • 托盘费用怎么核算
  • 其他现代服务业是什么
  • 外币财务报表的折算
  • 对公账户汇款怎么原路退回
  • 收付实现制和权责发生制的主要区别是确认
  • 会计凭证要保存多少年企业注销
  • win批处理命令
  • 打开 itunes
  • Win10桌面任务栏能不能删除
  • windows mobile
  • fdisk硬盘分区工具
  • unix网络命令
  • win8.1 安装
  • apache部署项目
  • unity she
  • 如何理解js的面向对象
  • 顺丰收取关税合理吗
  • 混合销售定义是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设