offsetof 详解

offsetof 详解1 简介 offsetof 本质上是 linux 内核的一个宏函数 其作用是获取结构体中某个成员相对于结构体起始地址的偏移量 2 源码分析 内核源码 path kernel msm 5 4 include linux stddef h define offsetof TYPE MEMBER size t amp

大家好,我是讯享网,很高兴认识大家。

1. 简介

offsetof 本质上是 linux 内核的一个宏函数,其作用是获取结构体中某个成员相对于结构体起始地址的偏移量。

2. 源码分析

内核源码:

path:kernel/msm-5.4/include/linux/stddef.h #define offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER)

讯享网

1. (type *)0,可以理解为把 0 地址强制转换为 type 结构体类型的指针,此时 0 就成了 type 结构体的首地址,指向该结构体,既然为结构体指针,那么自然可以引用该结构体的成员,所以 (type *)0)->member 的整体意义就是引用 type 结构体的成员 member。


讯享网

2. &(type *)0)->member) 便是取该结构体成员 member 的地址。而结构体起始地址为 0 时,结构体成员的地址为多少,其相对于结构体的偏移量就为多少。所以此时结构体类型成员的地址就是该成员相对结构体起始地址的偏移量。

3. 经过上面的分析之后,这段代码的逻辑就很简单了,通过 &((TYPE *)0)->MEMBER) 先取 TYPE 结构体类型成员的地址,强制转换成 size_t 类型后返回结构体类型成员的地址。又因为结构体起始地址为 0 时,结构体成员的地址就是偏移量,所以最后 offsetof 便返回结构体中某个成员相对于结构体起始地址的偏移量。

小讯
上一篇 2025-01-26 18:05
下一篇 2025-03-31 16:20

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/18440.html