一文轻松理解内存对齐 - 知乎
结构体(struct)对齐
规则 1:成员地址 = min(自身对齐值, 有效对齐值)
的倍数
规则 2:结构体总大小 = 最大成员对齐值的整数倍
规则 3:成员排列顺序影响最终大小
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#pragma pack(1)//设置默认对齐数为1
struct S1
{
char c1;
int i;
char c2;
};
#pragma pack()//取消设置的默认对齐数,还原为默认
int main()
{
//输出的结果是什么?
printf("%d\n", sizeof(struct S1));
return 0;
}
|
1
2
3
4
5
6
7
|
#pragma pack(push, 1)//设置默认对齐数为1
struct MyStruct {
char a;
int b;
double c;
};
#pragma pack(pop)//取消设置的默认对齐数,还原为默认
|
1
2
3
4
5
|
struct MyStruct {
char a;
int b;
double c;
} __attribute__((packed));
|