文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL内存管理机制浅析

2024-12-13 22:24

关注

通常情况下,C++中通过用new方式申请内存空间时,是在系统的堆内存空间中进行分配,底层使用C标准库的malloc()完成内存分配工作。

因此本次申请的内存空间大小,是根据程序运行时对象的大小及使用情况来决定的。

但是某些场景中,可能需要预先分配完成内存空间,然后再把对象"放置"在之前预先分配的内存空间上。即所谓的placement new操作。

定点放置的new操作的语法不同于普通的new操作,比如:我们一般在堆中申请内存空间,通常写:

Object* o = new Object();

而定点放置new的语法形式为:

Object* o = new (pointer) Object();

这里的pointer就是预先分配好内存块的首地址。

二、placement new使用场景

传统堆分配内存方式的弊端:通过new操作符进行堆内存的分配,操作系统需要在堆中找到连续且大小符合要求的内存空间,这个查询匹配的效率是低下的。

极端情况下可能由于空间不足,导致出现内存分配失败的问题发生。

placement new分配方式:创建的对象都在预先分配好的内存缓冲区中操作,无需查询及匹配内存空间,内存分配的时间是常量O(1)。

由于在之前预留的内存空间进行分配,因此不会出现程序运行时由于内存空间不足,导致内存分配失败的问题。

三、placement new和 MySQL 内存管理机制的关系

正是由于上述placement new的机制特性,因此其非常适合那些对时间,性能要求高,长时间运行,不希望被中断的应用程序。例如数据库这类的应用场景,就是很好的例子。

MySQL内部使用mem_root进行内存管理,可以实现多次批量的内存空间申请,并且可以把对象放置到mem_root定义的内存空间中,这样程序运行失败或者中途异常crash退出,我们就无需关心是否成功释放内存。

一切都通过mem_root进行代理操作,整个内存的申请、分配、回收过程透明完成。

四、MySQL中 mem_root 使用场景

//声明 mem_root 对象
MEM_ROOT execute_mem_root;
Query_arena execute_arena(&execute_mem_root,Query_arena::STMT_INITIALIZED_FOR_SP);

//预分配内存块空间
init_sql_alloc(key_memory_sp_head_execute_root, &mem_root,
MEM_ROOT_BLOCK_SIZE, 0);

//把thd中的mem_root指针指向execute_mem_root对应的内存块
thd->swap_query_arena(execute_arena, &backup_arena);

//把对象分配在预先申请的mem_root上
LEX *sublex = new (thd->mem_root) st_lex_local;

//一些逻辑计算操作
......

//释放表空间
free_root(&execute_mem_root, MYF(0));

总结:MySQL通过mem_root进行内存的统一申请、回收、管理。不但提升了内存分配的效率,提高了系统资源的利用率,而且减少了内存碎片化,是MySQL性能提升的一个重要抓手。

Enjoy GreatSQL :)
来源:GreatSQL社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯