一、整体代码
01.cpp
#include<iostream>
#include<stdio.h>
using namespace std;
#pragma pack(2) //编译器预设偏移值为2
struct Test
{
char a;//偏移为0,占位1
double b;//偏移为8和2中最小数,为2,占2-9
char c;//偏移为1和2中最小数,为1,占10,最后结构体大小为最大偏移值2的整数倍,为12。
};
//第一个成员与结构体变量的偏移值为0
//其他成员偏移取决于自身大小与编译器预设偏移值中较小的那个
//结构体大小是最大偏移值的整数倍
//0空1234567810空
int main(void)
{
cout<<sizeof(Test)<<endl;//运行结果为12
return 0;
}
二、解释
请参见注释。
#pragma pack (n) 作用:C编译器将按照n个字节对齐。
#pragma pack () 作用:取消自定义字节对齐方式。
#pragma pack (push,1) 作用:是指把原来对齐方式设置压栈,并设新的对齐方式设置为一个字节对齐
#pragma pack(pop) 作用:恢复对齐状态