首页  >  文章  >  后端开发  >  为什么 `sizeof(myStruct2)` 返回 12 个字节,而 `sizeof(myStruct1)` 返回 6 个字节?

为什么 `sizeof(myStruct2)` 返回 12 个字节,而 `sizeof(myStruct1)` 返回 6 个字节?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-26 10:01:03525浏览

Why Does `sizeof(myStruct2)` Return 12 Bytes While `sizeof(myStruct1)` Returns 6 Bytes?

C 结构中的内存对齐

在处理 C 中的结构时,内存对齐在优化内存使用和性能方面起着至关重要的作用。如果您对以下两个结构之间的内存对齐差异感到困惑:

<code class="c">typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
} myStruct1;

typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
    int i;
} myStruct2;</code>

其中 myStruct1 和 myStruct2 具有相同的 6 字节组合数据大小,但 myStruct2 使用以下命令报告大小为 12 字节sizeof(),答案在于内存对齐。

在大多数 32 位机器上,对齐边界通常为 4 个字节。这意味着结构与 4 字节的最接近倍数对齐。在 myStruct1 中,每个成员都是 2 个字节,因此它们之间没有插入任何 padding,实际大小仍为 6 个字节。

但是在 myStruct2 中,添加 4 字节整数(int)需要一个4 字节对齐边界。由于原始结构中的初始 6 字节数据未与 4 字节边界对齐,因此在 v3 和 i 之间插入 2 字节填充。此填充确保 i 从 4 字节边界开始,从而导致 myStruct2 的总大小为 12 字节。

请记住,在大多数情况下,结构仅与其最大成员的边界对齐。在本例中,myStruct2 中的 int 成员确定了对齐边界,这解释了两个结构之间内存对齐的差异。

以上是为什么 `sizeof(myStruct2)` 返回 12 个字节,而 `sizeof(myStruct1)` 返回 6 个字节?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn