container_of实现原理详解

container_of在内核函数中经常使用,该函数的功能是根据一个结构体成员的指针,返回这个成员指针所在的结构体的首指针。举例说明如下:

struct std

{

  int a;

  short b;

  char c;

  int d;

};

 

Stuct std test;

Int *p = &test.d;

container_of(p, Stuct std,d) //这个函数将返回test变量的首地址,定义这个函数的目的是方便指针在驱动模块内部传递。

该函数实现宏定义如下:

container_of实现原理详解_第1张图片

Offsetof宏定义的作用是计算一个结构体成员距离结构体首部的编译,由于结构体成员在内存中存放的位置满足线性关系,地址从低到高一次增长,利用这个特性可以巧妙计算偏移。

将0地址强制转换成我们需要的类型的指针,然后直接返回结构体成员的指针就是偏移,因为首地址是指向0地址的。

Typeof是c语言关键字,是获取该变量的类型作为类型定义,根据传入的成员指针减去该成员在结构体中所占的偏移就是该结构体的首地址。

 

你可能感兴趣的:(work)