MySQL 指针的艺术--base_list

这篇博客深入探讨了MySQL中的base_list设计,从引言开始,详细讲解了List结构,提到了一个小Daemon的示例,接着阐述了如何抽离base_list实现,并重点解析了base_list::remove方法的实现细节,最后进行了总结并提供了相关参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

             读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的功能极为丰富,具体接口如下

Public Member Functions

bool  operator== (const base_list &rhs) const
void  empty ()
  base_list (const base_list &tmp)
  base_list (const base_list &rhs, MEM_ROOT *mem_root)
  base_list (bool error)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值