位置: 编程技术 - 正文

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

  • 车船税税金及附加计入管理费用嘛
  • 宁波财税网会计之窗官网
  • 一般纳税人是什么型企业
  • 采购无发票怎么处理
  • 收回应收账款编制什么凭证
  • 企业所得税营业收入和增值税销售收入
  • 采购单是原始凭证吗
  • 收到扶贫款怎么做会计分录
  • 个税是每个月都扣吗
  • 电子发票红字发票怎么开
  • 文化事业建设费怎么计算
  • 银行汇票应计入什么科目
  • 其他扣款税后应该怎么做账?
  • 一次性补缴的社保能全额退吗
  • 固定资产的初始成本包括
  • 由母公司承担子公司债务的财务处理怎么做?
  • 企业职工福利费扣除标准
  • 企业所得税为什么那么高
  • 0税率发票纳税申报如何填报
  • 税款滞纳金如何免除
  • 当前一般纳税人增值税税率
  • 个人二手房转让税费
  • 环保税计入项目成本吗
  • 预缴企业所得税是含税数还是不含税
  • 医疗保险中的大病保险怎么报销
  • 低值易耗品处理的目的
  • err出错
  • 微软输入法卸载不了
  • 结转完工工程成本是什么
  • 电脑桌面上的图片怎么打印
  • 收回以前年度款项如何处理
  • 若依框架使用教程
  • 红嘴牛文鸟图片
  • php类型约束用法有哪些
  • 省外的发票能入账吗
  • 各行业税点大全最新
  • 2021新财务报表
  • 现金支付的现状
  • 如何做进项税额转出处理
  • ps里的钢笔工具
  • 电脑自学网
  • 4s店除了卖车还有什么
  • SQL Server Native Client下载 SQL Server Native Client安装方法
  • db2入门
  • mongodb 设置用户名密码
  • sql编程软件哪个好用
  • 无形资产属于货物吗为什么
  • sqlserver完整备份
  • 研发费用明细科目怎么填
  • 计提贷款损失准备的意义
  • 应收账款可能出现贷方余额吗
  • 专项资金补助经费如何入账
  • 视同销售收入涉及税务如何做账?
  • 没报税可以先清卡吗
  • 本年利润的借方科目
  • 某酒店住宿费用定价分析
  • 空气检测费计入什么科目
  • 缴纳注册资金印花税怎么做账
  • tcpdump的用法
  • linux软件安装源
  • fix it club
  • Windows Server 2008网络安全与终端服务
  • macbookpro查看硬盘
  • linux参数命令
  • yum下载已安装的包
  • win8电源设置
  • win7系统无法开机解决方法
  • sendmail端口
  • win8 控制面板
  • jquery移动端ui
  • nodejs示例
  • css要学到什么程度
  • golang 和 python
  • c和unity3d
  • shell脚本用法
  • 抛物线动画演示视频
  • 用shell脚本创建用户
  • 22号天蝎座的运势
  • 北京地税局上班时间查询
  • 零申报印花税的应税凭证名称怎么填写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设