typeof、offsetof、container_of的解释
来源:互联网 发布:简单的ps软件 编辑:程序博客网 时间:2024/05/29 04:08
链表是内核最经典的数据结构之一,说到链表就不得不提及内核最经典(没有之一)的宏container_of。
container_of似乎就是为链表而生的,它的主要作用是根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针,最典型的应用就是根据链表节点获取链表上的元素对象。
这个宏乍一看有点瘆人,宏里面包含了两个关键字:typeof和offsetof:
container_of的宏定义如下:
- #define container_of(ptr, type, member) ({ \
- const typeof( ((type *)0)->member ) *__mptr = (ptr); \
- (type *)( (char *)__mptr - offsetof(type,member) );})
typeof是GNU对C新增的一个扩展关键字,用于获取一个对象的类型,在很多时候我们处理的对象通常是一个指针,而此时如果想知道指针所指向的对象的类型,typeof就派上用场了,详见GNU的官方文档:http://gcc.gnu.org/onlinedocs/gcc/Typeof.html
现在看container_of宏的第一条语句:
- const typeof( ((type *)0)->member ) *__mptr = (ptr); \
- (type *)( (char *)__mptr - offsetof(type,member) );})
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
阅读全文
0 0
- typeof、offsetof、container_of的解释
- offsetof typeof container_of 浅析
- container_of,offsetof,与typeof
- typeof、offsetof、container_of
- offsetof ,container_of ,typeof 用法
- linux内核细节- typeof、offsetof、container_of
- container_of与offsetof的原理
- offsetof,container_of
- 两个重要的宏 offsetof 和 container_of
- offsetof和container_of
- offsetof与container_of宏
- 内核:offsetof + container_of 分析
- offsetof和container_of
- offsetof、container_of 实现
- container_of与offsetof详解
- offsetof和container_of总结
- offsetof与container_of宏
- offsetof与container_of
- Java细节与规范:ArrayList为何建议赋予默认值及其扩容机制
- SPOJFTOUR2-Free tour II
- TensorFlow:NameError: name ‘input_data’ is not defined
- java开发必会技能
- [Linux--Shell]linux下tree命令详解
- typeof、offsetof、container_of的解释
- Java 应用性能调优实践
- Android WebView的loadData方法注意事项
- 如何使用Web Service进行WSDL逆向生成服务端
- SpringCloud——服务注册
- 游戏内截图,surfaceView截图
- caffe源码 池化层
- [thinkPHP5项目实战_18]友情链接界面搭建和数据添加
- 01-面向对象(继承-子父类中的构造函数-子类的实例化过程).1 01-面向对象(继承-子父类中的构造函数-子类的实例化过程)2 01-面向对象(继承-子父类中的构造函数-子类的实例化过程)3