首页 > 后端开发 > C++ > 正文

为什么具有短成员的 C 结构体的大小并不总是成员大小的倍数?

Barbara Streisand
发布: 2024-10-26 13:00:29
原创
526 人浏览过

Why is the size of a C struct with short members not always a multiple of the member size?

理解 C 结构体中的内存对齐

内存对齐是 C 编程中的一个重要概念,因为它影响数据在内存中的存储方式和由处理器访问。在结构体上下文中,内存对齐决定了结构体的各个成员在内存中的布局方式。

考虑以下结构体:

<code class="c">typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
} myStruct;</code>
登录后复制

在内存对齐的 32 位机器上通常设置为 4 字节,人们预计该结构的总大小为 8 字节。但是,sizeof(myStruct) 运算符仅返回 6 个字节。

之所以会出现差异,是因为结构体的每个成员都是无符号短整型,其大小为 2 个字节。由于所有成员的大小相同,因此它们之间不会插入任何填充。结果,该结构体在内存中占用了 6 个字节。

现在,让我们修改该结构体:

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

在这种情况下,存在一个 int 成员,其大小为4 个字节,更改结构体的内存对齐方式。 int 成员必须在 4 字节边界上对齐。由于它前面有 6 个字节,因此在 v3 和 i 之间插入 2 个字节的填充。这使得结构体的总大小达到 12 个字节,由 sizeof(myStruct) 确认。

总之,C 结构体中的内存对齐可确保成员在内存中正确对齐,以优化处理器性能并减少内存使用。类型仅与与类型本身一样大的边界对齐。当引入更大的类型时,它会设置整个结构的对齐方式,可能会引入填充来保持所需的对齐方式。

以上是为什么具有短成员的 C 结构体的大小并不总是成员大小的倍数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!