原文:offsetof与container_of宏[总结]

前言 今天在看代码时,遇到offsetof和container of两个宏,觉得很有意思,功能很强大。offsetof是用来判断结构体中成员的偏移位置,container of宏用来根据成员的地址来获取结构体的地址。两个宏设计的很巧妙,值得学习。linux内核中有着两个宏的定义,并在链表结构中得到应用。不得不提一下linux内核中的链表,设计的如此之妙,只需要两个指针就搞定了。后续认真研究一下这 ...

2013-12-12 23:53 7 17873 推荐指数:

查看详情

(转)offsetofcontainer_of[总结]

1、前言   今天在看代码时,遇到offsetofcontainer_of两个,觉得很有意思,功能很强大。offsetof是用来判断结构体中成员的偏移位置,container_of用来根据成员的地址来获取结构体的地址。两个设计的很巧妙,值得学习。linux内核中有着两个的定义,并在链表 ...

Fri Dec 13 16:54:00 CST 2013 0 4246
container_of学习笔记

最近在学习c语言编程,看到了container_of,深入学习了一天,做个笔记留念。 1、看一下书上写的container_of的版本: 2、举一个实例: 替换后的结果: 如果替换后的结果你还能看懂,说明你是真明白了,呵呵,有没有兴趣自己写一遍 ...

Thu Oct 19 16:32:00 CST 2017 0 8569
offsetof的实现

1、c语言的结构体中,因为字节对齐的问题,导致成员地址并不能根据类型的大小进行计算。例如: 2、offsetof的实现如下: 哈哈,复杂吧,解释一下:由于造成空洞的对齐动作是由编译器负责完成的,这里有一个欺骗编译器的指令:((TYPE *)0), 意思是定义一个 ...

Wed Oct 18 18:22:00 CST 2017 0 1802
关于container_of函数分析

View Code (一).分析下定义1: #define offset_of(type,member) ((int)&(((type *)0)->member)) (type * )0 :强制把0地址转化为type *类型 ...

Fri Jan 04 21:33:00 CST 2019 0 637
#define container_of(ptr, type, member)

#define container_of(ptr, type, member) 输入: 结构体一个成员的member地址ptr, 结构体的类型, 结构体一个成员member的名, 输出: 得到这个结构体变量的地址; 分析: 结构体类型是确定的,结构体成员 相对 结构体定义的起始地址 偏移 ...

Fri May 07 20:02:00 CST 2021 0 2009
结构体之offsetof详细解析

1、#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER) (include/linux/stddef.h) 1.1 功能: 返回结构体TYPE中MEMBER成员相对于结构体首地址的偏移量,以字节为单位 ...

Wed May 11 23:55:00 CST 2016 0 2032
总结——和函数的区别。

今天总结一下和函数的区别,还有各自的优缺点。 在预处理阶段会被编译器替换掉,而且一般只做简单的文本替换,编译器对其不做任何的语法检测。 定义时主要用于以下两方面: 1、简单文本或字符串的替换; 2、函数。 对于函数,我们可能比较陌生,下面举例来介绍一下函数 ...

Mon Oct 23 21:28:00 CST 2017 0 6747
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM