container_of()宏

转载 2011年01月16日 10:55:00

指针ptr指向结构体type中的成员member;通过指针ptr,返回结构体type的起始地址
          type
      |----------|
      |          |
      |          |
      |----------|
ptr-->| member --|
      |----------|
      |          |
      |          |
      |----------|
/**
* container_of - cast a member of a structure out to the containing structure
* @ptr:     the pointer to the member.
* @type:   the type of the container struct this is embedded in.
* @member:  the name of the member within the struct.
* */

#define container_of(ptr, type, member) ({                    /       
        const typeof( ((type *)0)->member ) *__mptr = (ptr); -
/
        (type *)( (char *)__mptr - offsetof(type,member) );})

container_of宏,它的功能是得到包含某个结构成员的结构的指针:
 
其实现如下:
 
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#define container_of(ptr, type, member) ({                      /
        const typeof( ((type *)0)->member ) *__mptr = (ptr);    /
        (type *)( (char *)__mptr - offsetof(type,member) );})
 
    分析可知__mptr指向的是一个type结构里typeof(((type *)0)->member)类型member成员的指针,offsetof(type,member)是这个成员在结构中的偏移,单位是字节,所以为了计算type结构的起始地址,__mptr减去它自己的偏移。

 

 

 

 

相关文章推荐

神奇的宏 container_of()

linux内核里的宏container_of() 的介绍以及如何实现的介绍

container_of()宏

container_of()宏 在学习Linux驱动的过程中,遇到一个宏叫做container_of。 该宏定义在include/linux/kernel.h中,首先来贴出它的代码: ...

Linux内核container_of宏

container_of宏是Linux内核中经常出现的一个东西,原型定义在linux/include/linux/kernel.h中#define container_of(ptr, type, me...

container_of宏

container_of宏

container_of()宏

container_of()宏  /*说白了就是通过一个结构体局部来获取整个结构*/ 在学习Linux驱动的过程中,遇到一个宏叫做container_of。 该宏定义在include/linu...

container_of宏

17.container_of宏 这个宏的是根据传进去的结构体中的某个成员的指针来返回该结构体的首地址,以后我们就可以通过结构体的首地址来方便访问该结构体中的任何成员了。 这个宏工作的原理:先用t...

关于Linux/kernel.h中的offsetof和container_of宏

一、 位于Linux/kernel.h中 #define offsetof(s,m) (size_t)&(((s *)0)->m) #define container_of(ptr, type,...

最详尽解释Linux内核源码中的container_of宏及其标准C版本实现

在Linux内核源码文件 include/linux/kernel.h中,定义了container_of宏,源码如下:/** * container_of - cast a member of a ...

container_of()宏

在学习Linux驱动的过程中,遇到一个宏叫做container_of。 该宏定义在include/linux/kernel.h中,首先来贴出它的代码: /**  * container_of...

container_of 宏

container_of 宏 在学习Linux驱动的过程中,遇到一个宏叫做container_of。 该宏定义在include/linux/kernel.h中,首先来贴出它的代码: /**  * c...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)