背景
在内核中经常需要做指针偏移。往往是不同模块有自己的struct结构体B,这个结构体实际内存地址是被上级结构体A的一个成员。如何通过这个B获取到A。
举个例子:
struct A {
int mem_a;
struct B mem_b;
};
struct A enty_a;
假设知道mem_b的地址,可以得到enty_a。
一个闭环
从A获取B就用 a->b取指针就可以了,编译器会自动计算。
但是如果要从b获取a,就得计算,也就是先获取b地址Addr1,然后获取a到b的偏移offset2,然后用Addr1-offset2得到地址就是a的地址。
a到b的偏移如何获取呢?
假设有一个struct a的结构,起始地址是0,那么a到b的偏移就是a->b
代码
#ifndef container_of
#define container_of(ptr, type, member) \