Linux 内核中container_of的理解

在linux kernel中, container_of的定义如下:

 

其作用是根据结构体类型、它的一个成员地址及该成员名称来获取该结构体的起始地址。 其中, typeof 是GNU C对标准C的一个扩展,用于获取指定变量的数据类型。 此外用到了另外一个宏定义:

offsetof 获取结构体成员在结构体内部的偏移。它的实现很巧妙,即将0x0位置当做一个TYPE类型的结构体,此时结构体的成员地址也就是其结构体内部地址了。

 

理解了typeof 和 offsetof, container_of的实现也就很容易理解了。 精巧高效的实现,不得不佩服!

 

图片来源于:http://www.embedu.org/Column/Column433.htm

posted @ 2014-02-22 11:09  mushr0m  阅读(193)  评论(0编辑  收藏  举报