container_of原来这么简单

2025-04-19 18:30:06

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。
猜你喜欢