我知道填充,它的规则,为什么需要等等。
我的问题给出了结构,
struct my_struct {
int a;
char c;
};
在这种情况下,c 的起始地址是字对齐的,但编译器仍然添加了 3 个字节(假设字大小为 4)填充。 c 之后没有元素,为什么我们需要这 3 个字节? 我检查了以下内容,
int g_int1;
struct my_struct st;
int g_int2;
上面我的意思是我的其余变量声明不依赖于先前变量大小的单词对齐。编译器总是尝试对齐下一个变量,而不管其全局或局部自动变量。
我看不出有任何字节顺序的原因,因为这是 char,对于一个字节来说无关紧要。我认为是什么原因而不是检查最后一个元素条件编译器总是在需要时添加填充。
正当理由是什么?
最佳答案
因为如果 sizeof(my_struct)
是 5 而不是 8,那么如果你这样做:
my_struct array[2];
那么 array[0]
将是字对齐的,但 array[1]
不是。 (回想一下,数组查找是通过将 sizeof(array[0])
的倍数添加到第一个元素的地址来完成的。)
关于c - 为什么 __last__ 元素需要 c struct 填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14607006/