嵌入式技术论坛
直播中

刘军

8年用户 1480经验值
私信 关注
[经验]

在RT-Thread中普通链表和侵入式链表有何区别

普通链表

学习数据结构的时候写的链表是下面这个样子


侵入式链表

在 RT-Thread 以及 Linux 内核中链表是这样定义的


在使用的时候是这样定义的


每一个内核对象定义的时候,让结构体包含一个成员变量,这个成员变量是一个通用的链表结点。

二者区别

普通的链表和侵入式链表的区别在于

普通的链表结点的指针域存放的是 下一个结点的内存首地址

侵入式链表结点的指针域存放的是 下一个结点的链接域成员变量的内存首地址

普通的链表有了结点的内存首地址之后,该结点的其它成员变量很轻松就可以访问到

那既然侵入式链表存放的是 下一个结点的链接域成员变量的内存首地址,如果想获取下一个结点的所有成员变量该如何操作呢,这里就需要使用到 list_entry 这个宏了


list_entry
宏 list_entry 用来通过结构体的成员指针来返回整个结构体的地址,有了结构体的地址,那么结构体其它成员就可以访问到了

该宏的实现如下:



更多回帖

发帖
×
20
完善资料,
赚取积分