C语言-对齐模数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

#pragma pack(show)//查看当前对齐模数

//第一个属性开始,从0开始偏移
//第二个属性开始,要放在该类型的大小 与 对齐模数比 取小的值 的整数倍
//所有属性计算完后,整体二次偏移,将整体计算结果放在结构体最大类型与对齐模数比 取小的值的整数倍上

//#define PACK_SET_1

#ifdef PACK_SET_1
#pragma pack(1)//更改对齐模数2^n
typedef struct _STUDENT {
	int a;		//0~3
	char b;		//4~5
	double c;	//6~13
	float d;	//13~16
}Student;

#endif // PACK_SET_1

#ifndef PACK_SET_1
typedef struct _STUDENT {
	int a;		//0~3
	char b;		//4~7
	double c;	//8~15
	float d;	//16~19
}Student;
#endif // !PACK_SET_1

int main(int argc, char* argv[])
{

#ifndef PACK_SET_1
	//#pragma pack默认值 16
	//结构体最大类型double的大小是8小于16,最后放在8的整数倍上,结果为24
	printf("#pragma pack(16)  sizeof(Student) = %d", sizeof(Student));
#endif // !PACK_SET_1

#ifdef PACK_SET_1
	//#pragma pack(1)//更改对齐模数为2^n,这里定义为1
	//结构体最大类型double的大小是8大于1,最后放在1的整数倍上,结果为17
	printf("#pragma pack(1)  sizeof(Student) = %d", sizeof(Student));
#endif // PACK_SET_1

	system("pause");
	return EXIT_SUCCESS;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值