引言
读MySQL源码已经有一段时间了,对于MySQL这个庞然大物,读起来真是费时费力,即使配备gdb、mysql internal 外加一些讲解MySQL的书籍读起来还是朦朦胧胧,究其原因还是自己功夫不到家了,再接再厉吧,少年!
List
在读代码的过程中,发现大量的List<T>类型的变量,所以想要深入了解一下MySQL的链表是如何实现的。
MySQL的list相关源码主要为sql目录下的sql_list.h以及sql_list.cc这个两个文件。其中最重要的类是base_list,类图如下
Sql_alloc是MySQL封装的一个内存管理使用的类,这个类几乎相当于Java中的Object,只要是涉及到内存的结构基本都会是Sql_alloc的子类或者子孙类,有机会会在MySQL的内存管理上进行说明。很自然的base_list就成为了Sql_alloc的一个子类,这是一个基本的单链表类,list_node是链表中的节点抽象,虽然list_node也继承Sql_alloc,但是在list_node内部基本是没有任何的内存方法的调用。
base_list的功能极为丰富,具体接口如下