内存对齐规则:
默认条件下,内存对齐是以class/struct中最大的那个基本类型为基准的(x倍数)
如果在类的前面有
#pragma pack(n)
min(#pragma pack(n), 最大长度的类型)
结构体的总大小为 有效对齐值 的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。
class C
{
public:
short a;
long long c;
};
// 有效对齐值:8
class C
{
public:
short a;
int b;
}; // 有效对齐值:4
class C
{
public:
char a;
char b;
char c;
char d;
char e;
}; // 有效对齐值:1
class C
{
public:
char a;
char b;
char c;
short e;
}; // 有效对齐值:2
#pragma pack(2)
class A
{
public:
char a;
int s;
};
内存对齐的原因:
1.平台原因:某些处理器只能在特定地址处取数据
2.硬件原因:如果不对齐,可能要取好几次