C&C++ 内存对齐(极简版)

一文轻松理解内存对齐 - 知乎

 结构体(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));
experience
使用 Hugo 构建
主题 StackJimmy 设计