关于c++ 中 #pragma pack(n)用法
#pragma pack(4)
class TestC
{
public:
char a;
short b;;
char c;
};
int main()
{
TestC test;
int nSize = sizeof(test);
cout<<nSize<<endl;
return true;
}
#pragma pack规定的对齐长度
针对结构,联合,或者类的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。 也就是说 ,当#pragma pack的值等于或超过所有数据成员长度的时候,这个值的大小将不产生任何效果。而结构整体的对齐,则按照结构体中最大的数据成员 和 #pragma pack指定值n之间,较小的那个进行。
回到代码,a按照1字节对齐,其实就是第一个位置,[0],b按2字节对齐,以[1]为第一个,从第二个位置开始,[2][3],c按照1字节对齐,以[4]为第一个,从第1个位置开始,[4],这样类本身占5个字节,按照min(sizeof(short),4)字节对齐,也就是2字节对齐,即[0][1],[2][3],[4][5],为了使得最后2个字节对齐,补一个字节[5],整个类共计6个字节,(最终的大小一般为欸pack()设定值的整数倍数)