考虑我们定义了一个结构T
struct T {
int a, b;
};
如果b的地址是0x8b3000c且sizeof(int)是4.调用时container_of()
将返回什么值
答案 0 :(得分:1)
container_of
是linux内核代码中的一个宏,用于计算容器的地址。
例如,在您的情况下
struct T {
int a, b;
};
在container_of
地址上应用b
会产生struct T
的地址
struct T *pT = container_of(ptr_b, struct T, b);
其中ptr_b
将包含b的地址&b
通常情况下,我们不会关心我们获得的物理价值,例如0x8b3000c
,因为我们使用标识符。
由于您对物理感兴趣,因为两个成员都是int
,大小为4,忽略填充,pT将(Ox8b3000c -4) = Ox8b30008
但是,请不要在编码时做出这样的假设,可以填充struct。使用sizeof