#pragma pack(n)和#pragma pop()
跟据我的理解是:
struct sample
{
char a;
double b;
};
当sample结构没有加#pragma pack(n)的时候,sample按最大的成员那个对齐;
(所谓的对齐是指对齐数为n时,对每个成员进行对齐,既如果成员a的大小小于n则将a扩大到n个大小;
如果a的大小大于n则使用a的大小;)所以上面那个结构的大小为16字节.
当sample结构加#pragma pack(1)的时候,sizeof(sample)=9字节;无空字节。
(另注:当n大于sample结构的最大成员的大小时,n取最大成员的大小。
所以当n越大时,结构的速度越快,大小越大;反之则)
#pragma pop()就是取消#pragma pack(n)的意思了,也就是说接下来的结构不用#pragma pack(n)
#include <iostream>
using namespace std;
#pragma pack(n)
struct sample
{
char a;
double b;
};
int main()
{
cout<<"char = "<<sizeof(char)<<endl;
cout<<"double = "<<sizeof(double)<<endl;
cout<<"sample = "<<sizeof(sample)<<endl;
return 0;
}
输出:
当n=1时: sample = 9
当n=2时: sample = 10
当n=4时: sample = 12
当n>=8时: sample = 16
若n=7或者3之类的 还是16,因为内存里面没有这种字节的大小