位置: 编程技术 - 正文

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

  • 天然气税率13%变11%
  • 资产负债表债务法核算所得税
  • 预包装食品销售流程图
  • 以前多摊销
  • 收到所得税退税会计怎么记账
  • 以前年度损益调整
  • 餐饮服务属于什么票据类型
  • 小规模纳税人开了3%的专票还能享受1%
  • 费用化支出期末结转
  • 红字发票可以开部分金额吗
  • 为企业担保
  • 软件企业享受税收优惠
  • 存货清查的目的,主要是进行总账和明细账
  • 加计扣除所得税怎么算
  • 无形资产土地需要折旧吗
  • 房地产开发临时用电
  • 什么是成本核算你觉得成本核算重要吗为什么
  • 企业销售矿产是否需要缴纳资源税呢?
  • 私营独资企业是公司还是非公司
  • 个人所得税薪金所得是实发工资还是应发工资
  • 增值税计提金额
  • 企业有哪些o
  • 公司按揭购车
  • 租金怎么来计算个税
  • m1 mac 恢复出厂
  • 五险会计分录会计处理
  • 旅游开发公司税率
  • 合同预付款怎么做账
  • 在php中,字符串有哪些表示形式
  • 公司固定资产一般谁负责
  • 其他应付款余额在借方表示什么意思
  • 收到发票后补付什么意思
  • 如何处理收到的短信
  • php制作数字验证码
  • PHP:set_file_buffer()的用法_Filesystem函数
  • 企业采购过程中发生的材料短缺
  • 发票系统技术维护费
  • phpforeach
  • elemental ui
  • vue的路由器
  • transformerss
  • 视觉slam十四讲笔记
  • 人工智能导论论文2000字
  • 分公司和总公司的税务和财务关系
  • 销售边角料的会计分录
  • 增值税买一送一处理方法
  • 简述社会保险的项目
  • 主营业务收入未收到钱
  • mongodb数据库中间创建自己名字首字母的数据库
  • 专利年费可以做研发费用吗
  • 制造费用的作用
  • 如何判断有无运费险
  • 哪些属于发票
  • 企业所得税季度平均值怎么算
  • 投资者向企业投入资本的形式
  • 利息收入红字如何入账
  • 车间消耗品的会计分录
  • 装修属于营业费用还是管理费用
  • 职工困难补助账务处理
  • 亏损合同预计负债
  • 以前年度损益调整结转到哪里
  • 买相机送肩带吗
  • 年末净利润为负数结转本年利润实例
  • sql server 将数字转换成日期
  • mac开机声音怎么取消
  • linux find -a
  • sxs.exe病毒
  • win10录音机不能用
  • win10一年更新一次
  • cocos2dx 3.3 + QT5.3制作游戏编辑器
  • python如何进行线程操作
  • perl脚本输出变量
  • angularjs4
  • python向oracle写入
  • javascript要怎么学
  • javascript 进阶篇1 正则表达式,cookie管理,userData
  • jquery下拉列表框
  • Javascript字符串出现次数
  • 税务稽查协查管理办法 国家税务总局
  • 电子税务局房产税怎么申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设