考虑以下简单结构:
struct Struct {
public:
char a;
short int b;
char c;
};
如果此结构的实例放置在偶数(16 位对齐)地址,则需要两个填充字节来修复对齐(对于b
数组中的任何后续实例以及对于数组中的任何后续实例)。
但是,实例可以放置在奇数地址,然后即使没有填充字节,对齐仍然是正确的。
所以我做了一个测试并观察到 Visual C++ 2010 将添加这两个填充字节,这表明它总是将它们放置在偶数地址。
为什么 VC++ 不将它们放在奇数地址,每个对象节省 2 个字节?有什么我不知道的吗?