我们知道,由于填充,在结构中声明变量的正确顺序也会改变结构的大小。我看过参考here。
假设结构是:
struct s {
char b; //1 for char
char c; //1 for char + 2 for padding
int a; //4 for int
}my_struct;
因此my_struct
的大小为8
,但如果没有填充,则6
可能小于8
。
所以我的问题是:为什么填充是在结构中完成的?这个概念的必要性是什么?
因为没有填充,结构的尺寸较小。我的问题与填充何时发生无关,它更关注填充的概念。
答案 0 :(得分:1)
许多计算机体系结构在不同于1个字节的对齐中优化了内存访问(通常,1个字= 4个字节)。对齐访问通常比未对齐访问快(有时,无法访问未对齐数据)。出于这个原因,编译器以最佳对齐方式打包结构成员。在您的示例中,看起来对齐的大小为2个字节,因此b
位于偏移量0,c
位于偏移量2,a
位于偏移量4,总共8个字节(假设a
长度为4个字节)。或者,根据内联注释,在您的示例中,看起来最佳对齐方式与数据大小相等。因此,b
和c
是相邻的,因为大小为1,对齐也是如此,但a
长度为4个字节,因此需要4字节对齐。
在底线 - 这完全取决于架构。