这个结构的大小

zer*_*liu 2 c++ sizeof

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

我随机创建了一个Struct,它的大小让我感到惊讶,因为结果不等于我的计算结果:

int main( int argc, char ** argv ) {
    struct S
    {
        int i;
        int b;
        int c;
        long int e;
    };
    cout << sizeof (struct S) << endl; //sizeof is still an operator
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

通常,3*int + 1*long int = 3*4 + 8 = 20.

但结果是24.

这4个字节来自哪里?

das*_*ght 5

struct填充量是四个字节,大概是放在long int8字节的边界上,以加快对它的访问.这与平台有关:并非所有编译器都会添加这些字节.

  • @Derek:想想阵列. (2认同)
  • @Derek例如`struct foo {char a; 长b; char c; 长d; int; ``你可能会在````和`int`之后得到填充,总共有'7 + 7 + 4 = 18`字节的填充(如果`long`是8字节和`int` 4),而`struct bar {long b,d; int; char a,c; `只需要在结尾处获得2个字节的填充,以使大小为8的倍数.这是按数据大小排序的点. (2认同)