首页  >  文章  >  后端开发  >  为什么具有 3 个短整数的 C 结构的大小为 6 个字节,而添加一个整数的类似结构的大小为 12 个字节?

为什么具有 3 个短整数的 C 结构的大小为 6 个字节,而添加一个整数的类似结构的大小为 12 个字节?

Linda Hamilton
Linda Hamilton原创
2024-10-26 13:53:02579浏览

 Why Does a C Structure with 3 Short Integers Have a Size of 6 Bytes, But a Similar Structure with an Integer Added Has a Size of 12 Bytes?

C 结构中的内存对齐

在计算中,内存对齐是指对数据可以存储在内存中的地址进行的限制。了解内存对齐对于优化代码性能和避免意外行为至关重要。

问题陈述:

您正在使用通常需要内存对齐的 32 位系统设置为 4 字节。考虑以下结构:

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

该结构包含三个 2 字节字段,但使用 sizeof 运算符返回 6 个字节,而不是预期的 8 个字节。相反,以下结构体:

<code class="c">typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
    int i;
} myStruct;</code>

返回 12 字节的大小,正如字段数量增加和填充潜力所预期的那样。为什么结果大小存在差异?

解释:

在大多数机器上,数据类型对齐到不大于其大小的边界。在这种情况下,short 是 2 个字节,int 是 4 个字节。

  • 第一个结构:

    • 因为所有成员都是 2字节,结构体与 2 字节边界对齐。
    • 成员之间没有插入填充,导致总大小为 6 个字节。
  • 第二个结构体:

    • 4 字节 int 的存在要求结构体与 4 字节边界对齐。
    • 2 个字节的填充是在 v3 和 i 之间插入以确保正确对齐,使总大小达到 12 字节。

以上是为什么具有 3 个短整数的 C 结构的大小为 6 个字节,而添加一个整数的类似结构的大小为 12 个字节?的详细内容。更多信息请关注PHP中文网其他相关文章!

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