对齐的含义
不仅是结构体会对齐,其它很多地方也会遇到“对齐”,如下是一个总的理解:
- 自身对齐:偏移量为自身对齐要求的整数倍。
- 整体对齐:总大小为某个对齐要求的整数倍。
> 对齐的意义
(deepseek)对齐让CPU能像“拿整本书”而不是“拼凑碎片”一样工作。
结构体对齐规则
- 基本数据类型:对齐要求即为自身字节数。
- 嵌套结构体:
- 嵌套结构体自身内部要对齐。
- 将嵌套结构体看作一个整体,但其对齐要求是内部最大的对齐要求。
- 数组:看作一个整体,其对齐要求是元素类型的对齐要求。
- 最后整体对齐,对齐要求是内部最大的对齐要求。
> 如何使结构体最小
按对齐要求从小到大(或从大到小)排列成员,从小到大或从大到小是一样的(知乎此帖有明确回答:https://www.zhihu.com/question/400968651)。注意不是按成员大小排列。
1
2
3
4
5
6
7
8
9
10
11
12
/*
* 按成员大小,从小到大:120。
* 按成员大小,从大到小:120。
* 按对齐要求,从小到大:112。
* 按对齐要求,从大到小:112。
*/
struct Test
{
char buf[100];
int i;
double d;
};