gpt4 book ai didi

c++ - 为什么类对象的大小根据成员的顺序而不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:59 26 4
gpt4 key购买 nike

class CHaraICICCC
{
int i;
char c1;
int j;
char c2;
char c3;
char c4;
};

class CHaraIICCCC
{
int i;
int j;
char c1;
char c2;
char c3;
char c4;
};

void fun()
{
CHaraICICCC eici;
CHaraIICCCC eiicc;

int icic = sizeof(eici); // -> output of icic is 16.
int iicc = sizeof(eiicc); // -> output of icic is 12.
}

如果有人知道,请告诉我为什么这样。谢谢原

最佳答案

因为对齐。 x86 编译器倾向于在 4 字节边界上对齐 int 类型(为了更快的内存访问)所以 CHaraICICCC 可能会这样布局:

byte  0: \
byte 1: | <--- int i
byte 2: |
byte 3: /
byte 4: <----- char c1
byte 5: \
byte 6: | <--- Padding (wasted bytes)
byte 7: /
byte 8: \
byte 9: | <--- int j
byte 10: |
byte 11: /
byte 12: <----- char c2
byte 13: <----- char c3
byte 14: <----- char c4

总共 15 个字节,而 CHaraIICCCC 将是:

byte  0: \
byte 1: | <--- int i
byte 2: |
byte 3: /
byte 4: \
byte 5: | <--- int j
byte 6: |
byte 7: /
byte 8: <----- char c1
byte 9: <----- char c2
byte 10: <----- char c3
byte 11: <----- char c4

总共 12 个字节(没有为填充浪费的字节)。当然,这在很大程度上与编译器相关,并且取决于您的编译选项。

关于c++ - 为什么类对象的大小根据成员的顺序而不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4560797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com