当结构中考虑两个不同的整数时,contains_of()将返回什么值

时间:2016-02-06 06:10:55

标签: struct macros

考虑我们定义了一个结构T

struct T {
int a, b;
};

如果b的地址是0x8b3000c且sizeof(int)是4.调用时container_of()将返回什么值

1 个答案:

答案 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

总是好的