概述
今天要说的 问题比较基础,基础比较好的,可以不用阅读本文。因为你会觉得很傻逼,但却是我有点傻逼。
文章主旨
本文要来记录一下字节对齐的重要性。
示例一
下面来看一个简单的例子。
struct TightlyPacked {
char a;
int b;
short c;
};
这个结构体当直接求它的大小的时候,使用代码
std::cout << "TightlyPacked所占的字节数:" <<sizeof(TightlyPacked)<< std::endl;
求得的结构体总字节数为12.
示例二
当在上面的结构体上加上字节对齐,也就是我指定了字节对齐的数。
#pragma pack(push, 1) // 保存当前对齐状态,并设置1字节对齐
struct TightlyPacked {
char a;
int b;
short c;
};
#pragma pack(pop) // 恢复之前的对齐状态
这里指定了字节对齐数为1,按照一个字节对齐,求结构体所占字节数。
std::cout << "TightlyPacked所占的字节数:" <<sizeof(TightlyPacked)<< std::endl;
得到的总字节数为7.
总结
当指定了字节对齐数后,程序会按照约定的字节数来对齐,就会出现不同的结果。所以网络传输中也要指定结构体字节对齐数。