container_of原来这么简单

2025-10-30 00:20:52

1、这个宏定义在include/linux/kernel.h里面了

#define container_of(ptr, type, member) ({                   \ 

const typeof( ((type *)0)->member ) *__mptr = (ptr);    \ 

(type *)( (char *)__mptr - offsetof(type,member) );})

这个宏是做什么的? 他可以根据结构体的成员变量获取所在结构体的首地址。

2、话说有个结构体a,  地址表示为 &a,  这个结构体里面有个成员叫b

地址表示为 &b,  现在请问 “  &b - &a  ” 表示什么含义? 

答案:偏移量,成员变量的首地址相对于结构体首地址的偏移量。

如果  &a 碰巧又等于0 ,那么  &b - &a = &b - 0 = &b 

这样话,上面的答案就变成了:成员变量的首地址,就是偏移量

这个说的就是 offsetof的作用

3、现在我们有了偏移量,再拿到成员变量的实际地址,减去上面说的偏移量,不就是当前结构体的首地址了吗!?

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢