位置: 编程技术 - 正文

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

  • 增值税发票综合服务平台密码
  • 补提企业所得税怎么做账
  • 税控盘的功能特点是
  • 融资租赁业务如何高效拓展
  • 购买金税盘维护费会计分录
  • 超过库存现金限额的现金要及时存入银行
  • 农产品普票进项税抵扣怎么做账
  • 所有者权益股东权益
  • 职工的补助金需交税吗
  • 快递费未支付应该寄走了吗
  • 公司账外现金
  • 出口货物未报关
  • 农业企业土地租赁费账务处理
  • 印花税计入应交税费需要调整吗
  • 房产订金是否缴纳土地增值税?
  • 计提所得税是在哪个科目
  • 金税盘服务费可以当月抵扣吗
  • 职工福利费扣除标准2022
  • 已抵扣的进项税额怎么转出
  • 小规模纳税人如何计算增值税
  • 选择简易征收可以开专票吗
  • 开具发票的收入如何做账务处理?
  • 上月暂估入账的原材料的发票已经送到财务部
  • 王者荣耀如何充值退款
  • 文件过滤什么意思
  • 工资薪金与劳务报酬的区别有哪些
  • 不起眼的暴利小生意农村
  • php面向对象编程
  • mac键盘快捷键设置
  • Vue3 + Vite + TypeScript + dataV 打造可视化大屏
  • 拆迁以后
  • vuejs动态加载组件
  • 增值税免征与即征的区别
  • php生成csv文件
  • 购买办公用品入库如何做账务处理
  • vue更改数据
  • css滚动条自动滚动
  • php如何做app
  • 用于研发的材料后期销售了应该怎么账务处理
  • 企业出口证明
  • Parcel 中文文档 | Parcel 中文网
  • mongodb项目使用说明
  • 进项税额漏报处理办法
  • 销售鸡蛋免税怎么交税
  • 小规模企业免征增值税如何申报
  • 综合单价税率调整如何结算
  • sqlserver2008sa用户不能登录
  • 税控盘维护费280元怎么做账
  • 员工高工资
  • 红冲更正的正确分录
  • 收据报销的注意点有哪些
  • 金税三期个税卸载流程
  • 运输公司赔偿账务处理
  • 政府补助会计核算
  • 非同一控制下企业合并,企业合并成本包括
  • 进口关税如何记账
  • 行政事业单位如何加强预算管理
  • 主营业务成本可以直接贷银行存款吗
  • 财务软件服务费合同印花税
  • 其他应付款时间长了怎么处理?
  • php 访问数据库
  • 远程查看微信聊天记录软件
  • freebsd 配置ip
  • 提升xp系统流畅度
  • dwm exe是什么
  • armcc.exe
  • 如何远程登录路由器
  • win7开机进入桌面黑屏但有鼠标
  • win8搜索框怎么打开
  • win7提示内部版本7601副本不是正版
  • typescript尖括号
  • opengl深度值与z值
  • vue eventhub
  • python xml.dom.minidom模块生成xml
  • shell脚本获取文件指定内容
  • js script跨域
  • javascript的含义和作用
  • 江苏税务个人所得税app怎么下载不了?
  • 税收科研工作思路
  • 冀地是哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设