|
2019-05-17
Object* o = new Object();
Object* o = new (pointer) Object();
//声明 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性能提升的一个重要抓手。
编辑:航网科技 来源:腾讯云 本文版权归原作者所有 转载请注明出处
微信扫一扫咨询客服
全国免费服务热线
0755-36300002