为什么C++中sizeof(结构体)不等于其所有字段sizeof之和?
你好!我开始学习C++时遇到了一个奇怪的行为。我有一个简单的结构体:
```cpp
struct MyStruct {
char c; // 1 字节
int i; // 4 字节
short s; // 2 字节
};
```
逻辑上,我期望这个结构体的大小是 1 + 4 + 2 = 7 字节。然而,当我输出 `sizeof(MyStruct)` 时,编译器显示为12!为什么会这样?我尝试了不同的字段顺序,大小会变化。例如,如果我把 `int` 放在第一个,大小有时变成8。这是编译器的bug还是我理解有误?请解释一下C++中结构体内存分配的实际工作原理。
<<>>
为什么结构体的大小大于其字段之和?
不,这不是编译器的bug。这是内存处理的一个特性,称为对齐(alignment)和填充(padding)。处理器不是逐字节读取内存的——它按数据块操作,这些块的大小通常是4或8字节。