*gdb调试方法gdbGNU提供的一个调试工具1. 单步调试检查程序的逻辑错误2. 调试段错误编译-g表示允许gdb进行调试gcc xxx.c -g使用gdb运行程序gdb ./a.outgdb指令l查看源码b 行号 指定行位置打断点r run运行程序n 下一步s 跟进函数p 变量 查看某个变量的值where 查看段错误时函数调用的栈关系#0 0x00005555555548eb in is_empty_dlink (pdlink0x0) at doulink.c:38 #1 0x0000555555554c69 in destroy_doulink (pdlink0x0) at doulink.c:180 #2 0x00005555555550c3 in main (argc1, argv0x7fffffffdf28) at main.c:41内核链表本质双向循环链表、有头链表不将数据存储在链表结点中而是将结点嵌入到要存储的数据中。好处该链表可以用来存储任意类型的数据增强代码的复用性。offsetof : 获取链表结点到结构体起始位置的偏移量container_of : 通过偏移量获取结构体首地址系统栈操作系统自己管理,先进后出栈数据结构中的一种线性存储结构只允许从一端进行数据插入和删除的线性存储结构特点先进后出FILO顺序栈空间连续满栈/空栈栈顶所在位置是否存有元素增栈/减栈根据栈的生长方向决定链式栈非连续空间链式栈:队列允许从一端进行数据插入另一端进行数据删除的线性存储结构。插入入队数据的一端----》队尾删除出队数据的一端----》队头特点先进先出FIFO,缓存数据链式队列循环队列1. 空队列队头和队尾在同一位置2. 满队列队列少存储一个数据当队尾1跟上队头哈希表哈希存储散列存储将要存储数据的关键字和数据存储位置值之间建立起对应的函数关系当数据存储时根据该关系映射数据的存储位置查找数据时利用该函数关系运算出数据的存储位置。目的为了快速检索数据可能存在哈希矛盾冲突,解决方法-开放定址法链地址法: