rea_free 将一块内存归还给buddy allocator
mem_pool_get_reserved 获得buddy allocator已经使用的内存大小
3内存分配堆(memory heap)
innodb中的内存管理最终的体现形式是mem_heap_t内存分配与管理,所有关于内存分配的操作都会调用mem_heap的API方法,mem_heap_t的结构定义如下:
struct mem_block_info_struct
{
ulint magic_n; /*魔法字*/
char file_name[8]; /*分配内存的文件*/
ulint line; /*分配内存的文件所在行*/
ulint len; /*block的长度*/
ulint type; /*依赖的底层分配类型,有DYNAMIC、BUFFER、BTR_SEARCH三种类型*/
ibool init_block; /*是否是外部分配的内存块*/
ulint free; /*被占用的空间大小*/
ulint start; /*可分配内存的起始位置*/
byte* free_block; /*备用block,仅仅在BTR_SEARCH方式可用*/
UT_LIST_BASE_NODE_T(mem_block_t) base;
UT_LIST_NODE_T(mem_block_t) list;
};
备注:mem_block_info_struct/mem_block_info_t/mem_block_t/mem_heap_t是等价
mem_heap_t的内存结构如下:
系统的malloc和free来作为内存管理。MySQL默认的是系统管理内存方式,一些有经验的DBA会使用系统的管理内存方式+TMalloc来做内存优化,借助TMalloc高效的内存管理方式实现MySQL的性能提升。