日期:2014-05-16  浏览次数:20814 次

从Linux内核代码中学习获得结构体成员偏移量的方法

作者:阿波

链接:http://blog.csdn.net/livelylittlefish/article/details/20565261

(几年前的一篇文章,翻出来共享一下。)


Content

0. 引子

1. 举例

(1) 代码

(2) 检查结果

(3) 为什么从0开始?

(4) 从非0地址开始的结果

2. 小结

 

0. 引子

 

linux-2.26.23版的内核代码中,./include/linux/stddef.h文件中有如下定义。

00020: #undef offsetof
00021: #ifdef  compiler_offsetof
00022: #define offsetof(TYPE,MEMBER)  compiler_offsetof(TYPE,MEMBER)
00023: #else
00024: #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
00025: #endif
00026: #endif /* KERNEL  */
00027:
00028: #endif

compiler_offsetof不是笔者关心的内容,第二个宏定义即为本文讨论的方法。

这个宏定义很好解释: