嵌入式学习(内核链表)

内核链表和普通链表的区别:

1. 普通链表当中数据域和指针域,没有做到区分,数据与指针形成了一个整体,而内核链表数据与指针是完全剥离的没有直接的关系。
2. 在普通链表当中所有节点的数据都是一样的类型,而内核链表中每一个节点的类型都可以是不同的。
3. 普通的链表每一个节点都只能出现在一个链表当中,因为它只有一对前驱 / 后继指针,而内核链表可以有多对前驱/ 后继指针。代码部分将会与普通链表结合起来一起理解。

 内核链表的基本结构

内核链表基于一个通用的双向链表节点 struct list_head 实现:

其本质还是一个双向链表。

但是他与一个结构体嵌套使用,可以大大提高链表的复用性。

通过嵌入节点来管理结构体

Linux内核链表将链表节点嵌入到其他结构体中,而不是专门的链表数据结构。这种设计让链表节点成为结构体的一部分,减少了内存开销并简化了操作。比如,通过 list_entry 宏可以从链表节点获取所属的结构体:

  • 通过结构体中包含的 list_head 实现链表组织。
  • 内存结构紧凑,链表节点和数据紧密联系。

内存与时间效率

内核链表通过减少额外内存分配和节点移动,提升了内存与时间的使用效率。这在需要高频操作的场景中尤为关键:

  • 高效的内存利用率。
  • 较低的时间复杂度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值