位置: 编程技术 - 正文

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

  • 未认证的进项税能做转出处理吗
  • 企业收到退税款怎么处理
  • 金税盘软件
  • 安防视频监控工程项目
  • 增值税零申报附加税费情况表没发保存
  • 所属税务机关是根据什么分配的
  • 事业单位缴纳增值税标准
  • 销售软件怎么做账
  • 抵扣联多长时间的勾选认证
  • 金融企业逾期贷款税前扣除
  • 委外研发费用如何开票
  • 建筑业农民工工资
  • 隔月红冲发票对报税有影响
  • 以前没有计提增值税吗
  • 董事费条款
  • 企业增值税普通发票和增值税专用发票
  • 增值税发票增量流程网上怎么申请
  • 营改增租赁服务有哪些
  • 发票认证勾选是一回事吗
  • 营业外支出增值税率是多少
  • 收到分包公司工程发票收入怎么做账
  • 基建项目税率
  • 可持续增长率计算例题
  • 管理费用的结转需要在明细账中体现吗
  • 盈余积累转增股本的个税问题
  • 我公司以房产土地为主
  • win7文件打开方式选错了如何恢复
  • 虚增利润
  • 劳务收入的会计分录
  • Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
  • 装饰装修工程月薪多少
  • 苹果手机最新款2023新上市
  • PHP:Memcached::increment()的用法_Memcached类
  • 高德地图api获取当前经纬度的城市地图
  • 深入解析wordpress
  • nginx同一个端口设置两个网站
  • php如何使用
  • 借应付职工薪酬贷其他应收款
  • 微信小程序开发一个多少钱
  • php判断https
  • 城建税退回与不退税区别
  • vue解决跨域的几种办法
  • 未确认融资费用账务处理
  • 定额发票需要交契税吗
  • 手机开的发票
  • 高价值配件用入固定资产吗
  • 家具采购单
  • 公司盖厂房没有票要交税吗?
  • 技术内部化
  • 支付宝付款对面知道名字吗
  • 小规模纳税人免税怎么做账
  • 增值税的预缴税怎么算
  • 代理服务费如何缴纳
  • 印花税处罚适用征管法六十四条规定
  • 车间管理人员的福利费计入什么科目
  • 负数发票作废后对原发票有影响吗
  • 外购商品用于赠送进项税可以抵扣吗
  • 跨月销项负数发票分录
  • 资产减值损失属于损益类的收入还是费用
  • 考核奖金属于工资吗
  • 出租土地使用权计入什么科目
  • 为什么规定视同销售?
  • 销售如果对待不同客户
  • 安装sql server 2008硬件要求
  • 安装sql2008时出现以下错误
  • linux操作系统查询命令
  • node. js教程
  • opengl怎么学
  • linux怎么调用python
  • python中的文件读写
  • 场景转换的技巧
  • linux系统mysql自动备份并使用ftp上传的方法
  • 浏览器提示flash被屏蔽
  • mongodb python
  • android简单app实例
  • js缩小图片尺寸
  • 江苏地税电子税务局官网登录
  • 个人所得税房贷能退多少钱
  • 2021税务稽查重点方向
  • 财税〔2009〕61号
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设