Laa*_*vaa 7 c c++ linux operating-system
为什么仅当存在多个结构成员时才添加填充的概念,为什么在存在单个基本数据类型成员时不包括填充?
如果我们考虑在32位机器上
struct
{
char a;
} Y;
Run Code Online (Sandbox Code Playgroud)
没有填充,并且Y的大小为1个字节.
如果我们考虑这个结构
struct
{
char a;
int b;
} X;
Run Code Online (Sandbox Code Playgroud)
X的大小为8字节.
我的问题是为什么在第二种情况下填充添加?如果要通过机器进行高效访问,通常以4字节的倍数读取数据,那么为什么第一种情况下没有填充?
Luc*_*ore 10
在第二种情况下添加填充,因为在您的机器上,a int与4个字节对齐.所以它必须驻留在一个可被4整除的地址.
0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B
a b b b b
Run Code Online (Sandbox Code Playgroud)
如果没有添加填充,则int成员从地址开始0x05,这是错误的.添加3个填充字节:
0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B
a | padding | b b b b
Run Code Online (Sandbox Code Playgroud)
现在int是0x08,这是好的.