我知道填充,它的规则,它为什么需要等等。
我的问题是结构,
struct my_struct {
int a;
char c;
};
在这种情况下, c 的起始地址是字对齐的,但编译器仍然添加了 3 个字节(假设 4 作为字长)填充。c 之后没有元素,为什么我们需要这 3 个字节?我检查了以下,
int g_int1;
struct my_struct st;
int g_int2;
以上我的意思是我的其余变量声明不依赖于先前变量大小的字对齐。编译器总是尝试对齐下一个变量,而不管它的全局或本地自动变量。
我看不出任何字节序的原因,因为这是 char 并且对于一个字节来说并不重要。我认为是什么原因而不是检查最后一个元素条件编译器总是在需要时添加填充。
有什么正当理由?