单向链表
节点 = 数据域 + 指针域(后继节点)
双向链表
相比于单项指针,双向指针存有前驱节点的地址,使链表的灵活性更高。
内核链表
在内核中
- offsetof:获取结构体某个成员到结构体开头的偏移量
- container_of:根据结构体成员的地址,获取结构体首地址双向有头
- 循环链表(C语言可以在非内核环境实现非循环内核链表)
- 不同点:不再将数据存放在链表结点中,而是将结点作为结构体的成员存在
- 优势:链表作为存储数据的载体,可以存储任意类型的数据。
gdb调试
- 用于定位段错误和查找逻辑错误
gcc main.c -g
gdb ./a.out
- 用法:调试时添加-g选项,并gdb可执行程序
- gdb常用命令
l : 查看源代码
b + 行号 : 下断点
r : 运行程序
s : 跟进到函数
n : 单步执行
p + 变量名 : 查看变量的值
where : 查看段错误是的栈信息