@2 根据上面三个规律,可以得出struct stu的大小是16,接下来我们看看struct team的成员是怎么分布的 @3 首先是char name[6],第一个成员直接占用6字节,我知道你们都懂😊 @4 然后来到了我们的重头戏,struct stu,首先,这个子结构体成员最大的对齐数是8(double),所以,需要对齐到偏移量为8的地方,符合offsetof(str...
如果结构体中只有一个元素,那么结构体所占的内存大小就是该元素类型在内存中所占的大小。例如:c struct stru_test_char { char a; }; sizeof(struct stru_test_char) = 1struct stru_test_int { int b; }; sizeof(struct stru_test_int) = 4struct stru_test_long { long c; }; sizeof(struct ...
上面三者取最小的,就是实际对齐单位(这里的“实际对齐单位”是我为了方便区分随便取的概念) 2.除结构体的第一个成员外,其他所有的成员的地址相对于结构体地址(即它首个成员的地址)的偏移量必须为实际对齐单位或自身大小的整数倍(取两者中小的那个) 3.结构体的整体大小必须为实际对齐单位的整数倍。 上面三步即是...
根据以上准则,在windows下,使用VC编译器,sizeof(T)的大小为16个字节;GNU GCC编译器则得到12字节。 二、struct的首地址即为第一个元素的首地址 如下程序,测试环境,GNU/Linux Debian, GCC 4.3.2-1-1 1#include<stdio.h> 2#define STRUCT_OFFSET(id, element) ((unsignedlong) &((structid*)0)->element)...
一.使用sizeof计算结构体的大小 通常情况下,我们习惯于使用sizeof运算符来计算结构体的大小。 例如,下面是一个结构体的定义: 代码语言:javascript 复制 struct Student{int id;char name[20];int age;float score;}; 其中,Student是该结构体的类型名,而id,name,age,score则是该结构体的成员。
structTest1{intb;doublec;longd;}Test1;intmain(){printf("size = %d\n",sizeof(Test1));return0;} 计算流程:当计算结构体大小时,为了方便计算,初始地址假设为0,int占了4个字节,总开辟的空间为4,因为要和下面的double类型对齐,double的起始地址必须为8,所以绿色部分为因对齐而另开辟的空间,double占...
C语言中结构体计算大小的规则 简介 C语言结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。你可以认为结构体是一种聚合类型。在实际开发中,我们可以将一组类型不同的、但是用来描述同一件事物的变量放到结构体中。例如,在校学生有姓名、...
structt3 {chara;charb;doublec;shortintd;inte; }; = structt3 {chara;charb;charreserved1[6];doublec;shortintd;charreserved2[2];inte; }; 5. 总结 计算结构体所占空间大小时记住两个整数倍; 为了使结构体占用的空间最小,应该将结构体成员按照所占空间大小从小到大的顺序进行排列。
在struct st3中int型a1占用4字节,char型变量a2占用1个字节,short型变量a3占用2个字节,long型变量a4占用8个字节,char型变量a5占用1个字节,所以总大小是:4 + 1 + 2 + 8 + 1 = 16。如果是#pagma pack(2)呢?相信你可以自己计算了。