首页 结构体字节对齐规则
文章
取消

结构体字节对齐规则

对齐的含义

不仅是结构体会对齐,其它很多地方也会遇到“对齐”,如下是一个总的理解:

  1. 自身对齐:偏移量为自身对齐要求的整数倍。
  2. 整体对齐:总大小为某个对齐要求的整数倍。


> 对齐的意义

(deepseek)对齐让CPU能像“拿整本书”而不是“拼凑碎片”一样工作。

结构体对齐规则

  1. 基本数据类型:对齐要求即为自身字节数。
  2. 嵌套结构体:
    1. 嵌套结构体自身内部要对齐。
    2. 将嵌套结构体看作一个整体,但其对齐要求是内部最大的对齐要求。
  3. 数组:看作一个整体,其对齐要求是元素类型的对齐要求。
  4. 最后整体对齐,对齐要求是内部最大的对齐要求。


> 如何使结构体最小

对齐要求从小到大(或从大到小)排列成员,从小到大或从大到小是一样的(知乎此帖有明确回答: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;
};
本文由作者按照 CC BY 4.0 进行授权
热门标签

Linux环境配置加载分析

-

热门标签