面试题答案
一键面试1. 主要数据结构
- MEM_ROOT结构体:它是内存管理的核心结构,用于管理内存分配。其中包含当前内存块指针,已分配内存大小等关键信息。
- MEM_BLOCK结构体:构成MEM_ROOT内存池的内存块。每个MEM_BLOCK有指向下一个内存块的指针,形成一个链表结构。
2. 操作步骤
- 初始化MEM_ROOT:在查询执行开始时,会创建一个MEM_ROOT结构实例。初始时,其内存块链表为空,已分配内存大小为0。
- 内存分配:
- 在简单查询执行过程中,当需要为查询相关的数据结构(如结果集的行数据存储、临时变量等)分配内存时,会先尝试从当前MEM_ROOT的活动内存块中分配。
- 如果当前活动内存块剩余空间不足,则创建一个新的MEM_BLOCK加入到MEM_ROOT的内存块链表中,并从新的内存块分配所需内存。
- 查询执行期间的内存使用:随着查询的进行,不断为各种数据结构按需分配内存。例如,在读取表数据并构建结果集时,为每一行数据分配内存来存储其各个字段的值。
- 内存释放:当查询执行完毕,整个MEM_ROOT及其关联的所有MEM_BLOCK所占用的内存会被一次性释放,将内存归还给系统,完成一次简单查询的内存管理过程。