问: #define   offsetof(struct_t,member)   ((size_t)&((struct_t   *)0)->member)  答:(struct_t   *)0是一个指向struct_t类型的指针,其
转载 2023-01-05 12:29:11
72阅读
转自:http://www.cppblog.com/lovedday/archive/2007/09/24/32801.html 今天看代码时,发现一个有用的东东,offsetof(s,m),这是一个宏,MSDN文档的说明如下: Retrieves the offset of a member from the beginning of its parent structure. size_
转载 精选 2009-08-04 12:59:25
1020阅读
Linux内核中的offsetof宏是一种非常有用的工具,它可以用来计算特定结构体内成员的偏移量。在Linux内核中,很多地方都会用到offsetof宏来获取特定结构体成员的偏移量,这样可以方便地访问和操作结构体中的数据。 在Linux内核中,结构体是一种非常常见的数据类型,它可以用来组织和存储数据。结构体中的成员通常是不同类型的数据,而offsetof宏可以帮助我们计算这些成员在结构体中的偏移
原创 2024-04-29 11:19:48
145阅读
offsetof(TYPE, MEMBER) 该宏在Linux内核代码(版本2.6.22)中定义如下:#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);   分析:(TYPE *)0,将 0 强制转换为 TYPE 型指针,记 p = (TYPE *)0,p是指向TYPE的指针,它的值是0。那么
原创 2008-03-23 14:12:55
7191阅读
1.宏原型功能:计算结构体成员地址相对于结构体起始位置的偏移量。输入:结构体名字structName,成员名memberName。输出:偏移量,大于等于0的整数。2.代码思路取得结构体地址和成员的地址,再用成员的地址转换成char类型减去转成char类型的结构体地址即可。即返回值=(char*)成员地址-(char*)结构体地址。但是我们只传入结构体名和成员名,没有传入具体的变量,怎么来获得结构体
原创 2月前
566阅读
转载 2019-04-18 16:34:00
280阅读
2评论
使用实例:typedef struct { const AVClass *class; char *expr_str; AVExpr *expr; double var_values[VAR_VARS_NB]; enum AVMediaType type;} SetPTSContext;#defi...
转载 2014-04-28 14:13:00
95阅读
2评论
在linux驱动源码中,有两个很有意思的宏,分别是offsetof和container_of,他们的作用和定义是这样子的offsetof获得结构体某成员相对于结构体的偏移长度/***计算的结构体中某成员的偏移量*/#defineoffsetof(TYPE,MEMBER)((size_t)&((TYPE*)0)->MEMBER)这个实现很巧妙,相当于设结构体的整体地址设成0,然后它的成
原创 2018-03-01 11:46:16
793阅读
!在这里插入图片描述(https://s4.51cto.com/images/blog/202112/15183351_61b9c48fe5e2266791.png?xossprocess=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW
原创 2021-12-23 11:12:39
498阅读
1、前言  今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大。offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址来获取结构体的地址。两个宏设计的很巧妙,值得学习。linux内核中有着两个宏的定义,并在链表结构中得到应用。不得不提一下linux内核中的链表,设计的如此之妙,只需要两个指针就搞定了。后续认真研究一下
原创 2022-01-13 15:16:00
329阅读
offsetof 和 container_of 宏是 C 语言中常用于结构体操作的两个宏,它们帮助程序员处理指针偏移和结构体的成员与结构体本身之间的关系。下面是对这两个宏的总结及其应用的详细介绍。1. offsetof 宏作用offsetof 宏用来获取结构体成员相对于结构体起始位置的偏移量。它返回一个 size_t 
#include <stdio.h> #define OFFSETOF(type, member) (size_t)&(((type*)0)->member) struct Point { int x; float y; }; int main() { printf("Offset of x: %zu\n", OFFSET
offsetof container_of
原创 2019-01-06 14:11:08
625阅读
  首先我们要明白一点通过结构体变量来访问结构体中的各个元素时,其本质上是通过指针的方式来实现访问的,只不过是这个时候编译器帮自动帮我们计算了每个元素与结构体起始地址之间的偏移量而已一:offsetof宏:#define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER)1
原创 2016-10-17 16:20:47
2097阅读
今天我们来看看Linux中的两个经典的宏:offsetof与container_of。下来我们先来看看它们两个的宏定义,如下#ifndefoffsetof#defineoffsetof(TYPE,MEMBER)((size_t)&((TYPE*)0)->MEMBER)#endif#ifndefcontainer_of#definecontainer_of(ptr,type,member)({\co
原创 2018-09-05 22:24:24
4421阅读
Alignof返回的对齐数是结构体中最大元素所占的内存数,不超过8, 参考:https://studygolang.com/articles/21827 unsafe.Sizeof 和 unsafe.Offsetof 的理解 package main import ( "fmt" "unsafe"
转载 2021-04-16 15:49:00
304阅读
2评论
结构体内存对齐 - (计算结构体大小) - 拿空间换取时间的做法 对齐规则   1.第一个成员在与结构体变量偏移量为0的地址处 2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处 对齐数 = 编译器默认的一个对齐数 与 该成员大小 比较取的较小值   vs 默认是 8 , gcc没有默认对齐数-对齐数就是该成员大小 3.结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数
原创 2021-06-26 10:24:32
1694阅读
链表是内核最经典的数据结构之一,说到链表就不得不提及内核最经典(没有之一)的宏container_of。container_of似乎就是为链表而生的,它的主要作用是根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针,最典型的应用就是根据链表节点获取链表上的元素对象。container_of的宏定义如下:#define container_of(ptr, type, membe
原创 2012-09-18 21:21:56
555阅读
offsetof宏的作用是获取结构体中某个成员相对于结构体起始地址的偏移量。通过计算成员在结构体中的位置,它提供了一种可移植的方法来确定偏移量。
原创 3月前
106阅读
原文: https://studygolang.com/articles/21827 以下讲解均在64位系统下进行 基础类型大小 typesize/bytes bool 1 intN, uintN, floatN, complexN N/8 int, uint, uintptr 1 *T 1 str
转载 2021-04-16 15:29:00
220阅读
2评论
  • 1
  • 2
  • 3
  • 4
  • 5