结构体所占字节的计算

#include<stdio.h>
#pragma pack(show) // 8 默认对齐模数

//对于自定义数据类型,内存对齐规则如下:
//1. 从第一个属性开始,偏移量为0
//2. 从第二个属性开始,地址要放在该类型的整数倍与对齐模数比中的最小值的整数倍上 
//3. 所有的属性都计算结束后,整体再做二次对齐,整体需要放在属性中最大类型与对齐模数比中最小值的整数倍上,20不是8的倍数,24是8的倍数,所以最终结果是24	
struct Person
{
	int a; //0- 3
	char b;//4-7 1和8比较,最小值是1,所以放在1的整数倍上,4就是1的整数倍
	double c;//8 - 15
	float d; // 16-19
};

//Person2所占字节大小是40,Person2中最大类型(标准数据类型)与对齐模数中最小值的整数倍,40是8的整数倍,所以就是40
struct Person2 {
	char e; // 0- 7
	struct Person f;//8-31
	double g; //32-39
};

void test01() {
	printf("Person结构体所占字节数:%d\n",sizeof(struct Person));
}

void test02() {
	printf("Person2结构体所占字节数:%d\n",sizeof(struct Person2));
}

int main(void) {
	//test01();
	test02();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值