通过结构体中某一成员的地址得到结构体的起始地址
Linux内核里面有那么一个宏:
#define list_entry(ptr, type, member) \
((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
|
初次看到的时候觉得很怪异,后来仔细看发现这个宏可以通过结构体成员得到结构体的起始地址~方法很巧妙!
由于Linux内核中的链表结构是嵌入到链表节点之中的,所以需要由链表的指针取得该指针所对应的链表节点地址。
阅读(862) | 评论(0) | 转发(0) |