#include <iostream>
using namespace std;
//#pragma pack(1)
struct A
{
int a;
char b;
short c;
};
struct B
{
char b;
int a;
short c;
};
int main()
{
cout << sizeof(struct A) << endl;
cout << sizeof(struct B) << endl;
}
运行结果:
这个主要是由于字节对齐所引起的
结构体默认的字节对齐一般满足三个准则:
(1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除。
(2)结构体每个成员相对于结构体首地址的偏移量(offset)都是成员自身大小的整数
倍,如有需要,编译器会在成员之间加上填充字节(Internal Adding)。
(3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要,编译器会在
最末一个成员之后加上填充字节(Trailing Padding)
一般利用下述代码改变其默认的字节对齐数,其中n是字节对齐数
#pragma pack(n)