为什么只在结构体有多个成员时才加入填充的概念,而在只有一个基本数据类型成员时不加入填充的概念?
如果我们考虑在 32 位机器上
struct
{
char a;
} Y;
没有填充并且 sizeof Y 达到 1 字节。
如果我们考虑这个结构
struct
{
char a;
int b;
} X;
X 的大小将为 8 个字节。
我的问题是 为什么在第二种情况下添加填充?如果是为了让通常以 4 字节的倍数 block 读取数据的机器进行高效访问,那么为什么在第一种情况下没有填充?
最佳答案
在第二种情况下添加了填充,因为在您的机器上,int
对齐到 4 个字节。因此它必须位于可被 4 整除的地址。
0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B
a b b b b
如果不添加填充,则int
成员从地址0x05
开始,这是错误的。添加了 3 个填充字节:
0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B
a | padding | b b b b
现在 int
位于 0x08
,没问题。
关于c++ - 为什么要为结构的多个数据成员而不是单个成员添加填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12861582/