FIELD NOTE / OPEN LOG

C&C++ Memory Alignment (Quick Guide)

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));