container_of宏实现如下:

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

首先,container_of的作用是,根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针。

那么这里又涉及到 typeof 和 offsetof两个宏。

typeof 是用于得到变量的类型;typeof是GNU C对标准C的扩展。

offsetof 用于得到结构体中某个成员的内部偏移。

offsetof 的宏实现如下:

1 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

这里将0作为TYPE的起始地址,那么((TYPE *)0) ->MEMBER就是MEMEBER的地址,也就是偏移了。

offsetof和__builtin_offsetof实现相同。

有了typeof 和 offsetof 再来理解container_of 。第一行定义了一个 常量指针 __mptr, 指向的变量类型为member的类型, 值为ptr。

那么__mptr的地址减掉member的内部偏移就可以得到结构体的起始地址。

转载于:https://www.cnblogs.com/Stomach-ache/p/4287616.html

typeof, offsetof, container_of宏相关推荐

  1. linux中offsetof与container_of宏定义

    linux内核中offsetof与container_of的宏定义 #define offsetof(TYPE, MEMBER)    ((size_t) &((TYPE *)0)->M ...

  2. offsetof宏和container_of宏

    文章目录 1 offsetof宏 1.1 宏的作用 1.2 编译器做了什么 2 container_of宏 2.1 ({})是什么? 2.2 typeof 2.3 原理分析 1 offsetof宏 1 ...

  3. (六)linux内核中的offsetof与container_of宏

    参考: offsetof与container_of宏[总结] #define offsetof(type, member) (size_t)&(((type*)0)->member)#d ...

  4. 【嵌入式】C语言高级编程-container_of宏(04)

    00. 目录 文章目录 00. 目录 01. typeof 关键字 02. typeof与宏结合 03. typeof在内核源码中应用 04. container_of 宏分析 05. contain ...

  5. container_of宏

    1.container_of宏 1> Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获 ...

  6. Linux内核中container_of宏的理解

    对 typeof 的理解: 实际上, typeof 并不是宏定义,它是GCC的关键字,是GCC特有的特性.如果只知道一个变量的名字要得到其类型,并不是宏定义能够完成的,这需要编译时的信息.所以,typ ...

  7. container_of宏定义分析---linux内核

    问题:如何通过结构中的某个变量获取结构本身的指针??? 关于container_of宏定义在[include/linux/kernel.h]中: /*_* * container_of - cast ...

  8. 内核中container_of宏的详细分析【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637597.html 内核中container_of宏的详细分析 16年2月28日09:00:37 内核中 ...

  9. Linux内核中的container_of宏

    container_of宏用于根据已知结构体某个成员的地址得到整个结构体变量的地址,宏定义如下: #define container_of(ptr, type, member) ({ \ const ...

  10. Linux字符设备驱动中container_of宏的作用

    Linux字符设备驱动中container_of宏的作用 首先看看这个宏的原型: container_of(ptr,type,member) 功能:根据一个结构体变量中的一个成员变量的指针来获取指向整 ...

最新文章

  1. qlist length 函数讲解_读《JavaScript 轻量级函数式编程》
  2. html给img添加滤镜,给图片在博客中添加滤镜效果_CSS/HTML
  3. springboot 使用interceptor 返回前端http状态码为0
  4. 深港澳大湾区(深圳).NET技术交流会圆满成功
  5. Magento安装后无法访问
  6. ctfshow-萌新-web6( 利用二进制绕过获取网站敏感信息)
  7. php 手动搭建环境
  8. Docker教程小白实操入门(7)--基于Commit定制镜像
  9. php excel 下拉菜单,Laravel Excel库(Maatwebsite):如何在导出中创建下拉列表 - php
  10. sincerit 小乐乐切割方块(规律+思考)
  11. 2022-3-26JavaSE试卷-答案
  12. WiFi网络测速专业版
  13. MT7621原厂openwrt SDK使能串口2和串口3
  14. 解锁ChatGPT超高级玩法,展示动态图片,纯干货分享!
  15. ARM-Linux开机自启动设置-mini2440开发板
  16. windows下把文件夹打成war包
  17. HTML5游戏开发经验及开发工具分享
  18. 运筹学基础(名词解释题总结)
  19. 如何从无到有做一个好关卡?
  20. IDA*算法实现的数字拼图游戏

热门文章

  1. 第一次知识补充及用户登录(三次机会重试)作业
  2. Python学习之路day01——002简单数据类型
  3. Android项目中JNI技术生成并调用.so动态库实现详解
  4. JavaScript 小知识
  5. 交易平台谁能在移动支付的大潮中成为赢家?
  6. mac 备份android 手机通讯录导入iphone,iphone如何导出通讯录(轻松教你iPhone备份通讯录的方法)...
  7. go开发属于自己的日志库-日志库易用性封装
  8. JAVA 中一个非常轻量级只有 200k 左右的 RESTful 路由框架
  9. 学习面向对象的第一天,感觉还好啦
  10. 【短语学习】True(False) Positives (Negatives) 的含义和翻译