计算结构体大小(内存对齐原则)struct、union、class

这篇博客详细的介绍结构体的大小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
	
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值