#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);
(TYPE *)0,將 0 強制轉換爲 TYPE 型指針,記 p = (TYPE *)0,p是指向TYPE的指針,它的值是0。那麼 p->MEMBER 就是 MEMBER 這個元素了,而&(p->MEMBER)就是MENBER的地址,而基地址爲0,這樣就巧妙的轉化爲了TYPE中的偏移量。再把結果強制轉換爲size_t型的就OK了,size_t其實也就是int。
typedef __kernel_size_t size_t;
typedef unsigned int __kernel_size_t;