这篇博客详细的介绍结构体的大小sizeof:union、struct、class。
一、不同数据类型所占的内存大小:
二、union联合体的结构体大小
1、关注点:
(1)联合体的大小为所有成员变量中所占字节数最大的;
(2)当联合体中有数组时,一方面要保证空间能够存储这个数组的大小,另一方面要保证最终的结果是最大数据类型的整数倍。
2、示例(不同的情况)
示例①
union A {
//所占内存大小
double a; //8
int b; //4
char c; //1
};
//按照联合体的计算规则:sizeof(A)=8
示例②
union B {
//所占内存大小
char s[9]; //9
int b; //4
double c; //8
};
//按照联合体的计算规则:sizeof(B)=16
示例③
union B {
//所占内存大小
long f; //4
char b[3]; //3
char c; //1
};
//按照联合体的计算规则:sizeof(B)=4
示例④
union B {
//所占内存大小
long f; //4
char b[5]; //5
char c; //1
int c[7]; //28
};
按照联合体的计算规则:sizeof(B)= 28
三、struct结构体的大小
1、关注点:
(1)struct的大小为最后一个成员的偏移量加上最后一个成员的大小,并且最终的结果要是所有数据成员大小的最小倍数;
(2)第一个成员的偏移量为0。
\qquad 第二个成员的偏移量=第一个成员的偏移量+第一个成员的大小。
(3)若struct中有数组,最终结构体的大小是按数组的数据类型的整数倍,而不是看整个数组。
2、示例(不同的情况)
示例①
struct A {
//偏移量
double a; //0
int b; //0+8=8