A Simple Guide to Understanding Memory Alignment
Structure (struct) alignment
Rule 1: A member’s address is a multiple of min(its alignment value, the effective alignment value).
Rule 2: The total size of a structure is an integer multiple of its largest member alignment value.
Rule 3: Member order affects the final size.
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));
|