为什么需要在结构中填充?

时间:2015-06-02 06:46:37

标签: c++ c structure

我们知道,由于填充,在结构中声明变量的正确顺序也会改变结构的大小。我看过参考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

所以我的问题是:为什么填充是在结构中完成的?这个概念的必要性是什么?

因为没有填充,结构的尺寸较小。我的问题与填充何时发生无关,它更关注填充的概念。

1 个答案:

答案 0 :(得分:1)

许多计算机体系结构在不同于1个字节的对齐中优化了内存访问(通常,1个字= 4个字节)。对齐访问通常比未对齐访问快(有时,无法访问未对齐数据)。出于这个原因,编译器以最佳对齐方式打包结构成员。在您的示例中,看起来对齐的大小为2个字节,因此b位于偏移量0,c位于偏移量2,a位于偏移量4,总共8个字节(假设a长度为4个字节)。或者,根据内联注释,在您的示例中,看起来最佳对齐方式与数据大小相等。因此,bc是相邻的,因为大小为1,对齐也是如此,但a长度为4个字节,因此需要4字节对齐。

在底线 - 这完全取决于架构。