offsetof宏与container_of宏1、由结构体指针进而访问各元素的原理(1)通过结构体整体变量来访问其中各个元素,本质上是通过指针方式来访问的,形式上是通过.的方式来访问的(这个时候其实是编译器帮我们自动计算了偏移量)。2、offsetof宏: #define offsetof(TYPE ...
分类:
其他好文 时间:
2019-10-18 16:13:07
阅读次数:
86
offsetof和container_of宏 offsetof宏的作用:计算结构体中某个元素相对结构体首地址的偏移量 container_of宏的作用:知道结构体变量中某个成员的指针,反推这个结构体变量的指针 sizeof(short) = 2 sizeof(int) = 4 sizeof(long ...
分类:
其他好文 时间:
2019-10-02 00:40:48
阅读次数:
158
1、offsetof 宏 将地址0强制转换为type类型的指针,从而得到结构体成员member相对于结构体起始地址的偏移量。 2、container_of 宏 作用:结构体(type)的成员member地址 减去 member在type中的偏移 得到该结构体(type)的起始地址。 containe ...
分类:
其他好文 时间:
2018-10-06 16:44:35
阅读次数:
201
offsetof宏:结构体成员相对结构体的偏移位置 container_of:根据结构体成员的地址来获取结构体的地址 offsetof 宏 原型: 非常巧妙,告诉编译器有一个指向结构体 TYPE 的指针,其地址是0,然后取该指针的 MEMBER 地址 ,因为基址是0,所以这时获取到的 MEMBER ...
分类:
其他好文 时间:
2018-09-08 23:37:40
阅读次数:
358
第31课 - 老生常谈的两个宏 1. Linux 内核中常用的两个宏定义 1.1 offsetof 宏 在 include/linux/stddef.h 头文件中定义 TYPE 是结构体类型、MEMBER 是结构体中一个成员的成员名 作用:offsetof 宏返回的是 MEMBER 成员相对于整个结 ...
分类:
其他好文 时间:
2018-06-20 00:07:41
阅读次数:
200
先上例子 测试结果: 其原型 offsetof宏的定义如下: 巧妙之处在于将地址0强制转换为type类型的指针,从而定位到member在结构体中偏移位置。编译器认为0是一个有效的地址,从而认为0是type指针的起始地址。 在不同的嵌入式系统里,不同开发商,不同架构处理器和编译器都有不同的offset ...
分类:
其他好文 时间:
2018-06-14 18:30:13
阅读次数:
825
在linux驱动源码中,有两个很有意思的宏,分别是offsetof和container_of,他们的作用和定义是这样子的offsetof获得结构体某成员相对于结构体的偏移长度/***计算的结构体中某成员的偏移量*/#defineoffsetof(TYPE,MEMBER)((size_t)&((TYPE*)0)->MEMBER)这个实现很巧妙,相当于设结构体的整体地址设成0,然后它的成
分类:
其他好文 时间:
2018-03-01 13:30:17
阅读次数:
127
转自:http://www.linuxidc.com/Linux/2015-07/120014.htm 本文首先介绍Linux下的经典宏定义,感受极客的智慧,然后根据该经典定义为下篇文章作铺垫。 offsetof宏定义: // 获得结构体(TYPE)的变量成员(MEMBER)在此结构体中的偏移量。# ...
分类:
系统相关 时间:
2017-07-07 14:24:33
阅读次数:
161
offsetof 宏 #include<stdio.h> #define offsetoff(type, member) ((int)&((type*)0)->member) /* ((type*)0)->member 释义:声明一个相应类型的结构体指针,该指针指向0地址处。再通过该指针访问各元素。 ...
分类:
其他好文 时间:
2017-05-19 19:26:16
阅读次数:
228
首先我们要明白一点通过结构体变量来访问结构体中的各个元素时,其本质上是通过指针的方式来实现访问的,只不过是这个时候编译器帮自动帮我们计算了每个元素与结构体起始地址之间的偏移量而已一:offsetof宏:#defineoffsetof(TYPE,MEMBER)((int)&((TYPE*)0)->MEMBER)1..
分类:
编程语言 时间:
2016-10-17 18:27:38
阅读次数:
141