gpt4 book ai didi

c++ - C 结构中的内存对齐

转载 作者:IT老高 更新时间:2023-10-28 13:58:49 26 4
gpt4 key购买 nike

我在 32 位机器上工作,所以我想内存对齐应该是 4 个字节。假设我有这个结构:

typedef struct {
unsigned short v1;
unsigned short v2;
unsigned short v3;
} myStruct;

普通添加的大小是 6 个字节,我想对齐的大小应该是 8,但是 sizeof(myStruct) 返回我 6。

但是,如果我写:

typedef struct {
unsigned short v1;
unsigned short v2;
unsigned short v3;
int i;
} myStruct;

普通添加大小为10字节,对齐大小应为12,这次sizeof(myStruct) == 12

有人能解释一下有什么区别吗?

最佳答案

至少在大多数机器上,类型只与类型本身一样大的边界对齐[编辑:你不能真正要求任何“更多”对齐,因为你必须能够创建数组,并且您不能将填充插入到数组中]。在您的实现中,short 显然是 2 个字节,而 int 是 4 个字节。

这意味着您的第一个结构与 2 字节边界对齐。由于所有成员都是 2 个字节,因此它们之间没有插入填充。

第二个包含一个 4 字节的项目,它与 4 字节的边界对齐。由于前面有 6 个字节,所以在 v3i 之间插入了 2 个字节的填充,在 short 中给出了 6 个字节的数据,两个字节的填充,以及 int 中另外 4 个字节的数据,总共 12 个。

关于c++ - C 结构中的内存对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5435841/

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