[有人问我为什么结构需要内部填充。这是我的回复。]

发件人:scs@eskimo.com (Steve Summit)
日期:2002 年 3 月 17 日 20:56:35 -0500
Message-Id:<2002Mar17.2056.scs.007@aeroroot.scs.ndip.eskimo.net>

你写道
> ... 仍然困扰我大脑的是为什么结构
> 需要内部填充

这是为了“对齐”。许多处理器无法访问 2 字节和 4 字节的数量(例如 int 和 long int),如果它们随意地挤在一起。

假设你有这个结构

	struct	{
		char a[3];
		short int b;
		long int c;
		char d[3];
		};

现在,你可能认为可以像这样将结构打包到内存中

	+-------+-------+-------+-------+
	|           a           |   b   |
	+-------+-------+-------+-------+
	|   b   |           c           |
	+-------+-------+-------+-------+
	|   c   |           d           |
	+-------+-------+-------+-------+

但如果编译器像这样安排它,对处理器来说会容易得多

	+-------+-------+-------+
	|           a           |
	+-------+-------+-------+
	|       b       |
	+-------+-------+-------+-------+
	|               c               |
	+-------+-------+-------+-------+
	|           d           |
	+-------+-------+-------+

在“packed”版本中,请注意,你我很难看出 b 和 c 字段是如何换行的?简而言之,对处理器来说也很困难。因此,大多数编译器会像这样“填充”结构(好像是额外的、不可见的字段)

	+-------+-------+-------+-------+
	|           a           | pad1  |
	+-------+-------+-------+-------+
	|       b       |     pad2      |
	+-------+-------+-------+-------+
	|               c               |
	+-------+-------+-------+-------+
	|           d           | pad3  |
	+-------+-------+-------+-------+