Linux内核中的常用宏container_of其实很简单

http://blog.csdn.net/npy_lp/article/details/7010752

通过一个结构体变量的地址,求该结构体的首地址。

 

#ifndef CONTAINER_OF
#define CONTAINER_OF(ptr, type, member) \
    (type *)((char *)(ptr) - (char *) &((type *)0)->member)
#endif

其中代码难以理解的地方就是它灵活地运用了0地址。如果觉得&( (struct test_struct *)0 )->ch这样的代码不好理解,那么我们可以假设在0地址分配了一个结构体变量struct test_struct a,然后定义结构体指针变量p并指向a(struct test_struct *p = &a),如此我们就可以通过&p->ch获得成员ch的地址。由于a的首地址为0x0,所以成员ch的首地址为0x4。

 Linux内核中的常用宏container_of其实很简单

原文链接: https://www.cnblogs.com/yuguangyuan/p/8066654.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    Linux内核中的常用宏container_of其实很简单

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/397790

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月11日 上午9:45
下一篇 2023年4月11日 上午9:45

相关推荐