位置: 编程技术 - 正文

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

  • 合同甲方乙方收钱付钱涉及什么税金
  • 本年利润需要毎月转入未分配利润吗
  • 餐饮流水账表格excel
  • 刚成立的公司好不好
  • 开具发票时如何选择对应的商品分类编码?
  • 收回已作为坏账准备的应收账款会计分录
  • 税务评估补税如何入账处理合适?
  • 为什么开增票要加点
  • 企业买电动车做资产如何做折旧?
  • 供电局发票金额可以多开吗
  • 银行承兑汇票上的承兑日期
  • 报销老板垫款会计处理
  • 资本公积金转增资本属于所有者权益吗
  • 无偿使用房屋
  • 出口退税限额如何理解
  • 业务招待费如何进行纳税调整
  • 已核销的应收账款
  • 折旧计算方法举例
  • 消费税和购置税怎么算
  • amr文件下载
  • 辞退补偿金额怎么做账
  • pddpic是什么文件
  • PHP:pg_lo_seek()的用法_PostgreSQL函数
  • 购入原材料所发票怎么入
  • lmgrd.exe是什么进程
  • 公司向职工借款利息需要交税吗
  • 罚款计入营业外支出影响当期损益
  • 销售旧固定资产开票税目是什么
  • php 登陆
  • vuex中this.$store.commit和this.$store.dispatch的用法
  • 设置php扩展路径
  • 正版菜狗
  • 好家伙41集
  • php开发程序
  • 发票公司名字开错,需要更改红字发票上的名字吗
  • 领用发票后
  • 未达起征点怎么填申报表
  • 自动结转制造费用生成不了凭证怎么办
  • 应收贷方表示啥
  • 可以主营业务成本增加现金减少吗
  • 其他综合收益在资产负债表中如何填列
  • 小规模纳税人如何开专票
  • 织梦cms怎么样
  • python apriori算法
  • 公司成立开的户叫什么
  • 企业亏损了
  • 运输服务是什么
  • 缴税零申报
  • 计提电费的会计分录怎么写
  • 高铁票丢失了可以补打吗
  • 收到退回货物
  • 生产设备改扩建会计分录
  • 商誉是成本法还是收入法
  • 应付股利科目怎么结转
  • 土地转让需要批准吗
  • 长期股权投资如何确认
  • 小规模纳税人所得税怎么计算
  • 建筑企业结转成本能不能不分人材机
  • 材料入库单金额写含税价吗
  • 审计备案表
  • 制造费用月末需要结转吗
  • 业务提成怎么做账内账
  • windows2000开机视频
  • debian10.6安装教程
  • linux开机启动过程图解
  • win8的安全中心
  • vmware15.5安装mac
  • linux0.11文件系统
  • win1021h2版本怎么样
  • 安卓闹钟软件下载
  • ugui scrollview
  • three.js 文档
  • unity导出3d模型
  • unity性能和内存优化
  • 浅蓝色html代码
  • c#属性窗口
  • js计算字体宽度
  • 建安企业异地个税怎么交
  • 餐饮企业需要缴纳哪些税
  • 怎样以实际行动争取入团
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设