#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;
}
C语言-对齐模数
最新推荐文章于 2024-09-09 12:46:52 发布