栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

深度理解C语言六——结构体内存对齐和结构体所占内存空间的大小

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

深度理解C语言六——结构体内存对齐和结构体所占内存空间的大小

本篇文章我们深入讨论一个问题:计算结构体的大小。
这里就涉及到结构体内存对齐,这个对齐规则是什么呢?带着这个问题,我们先来看一个示例:

这个代码是计算这个结构体所占内存的大小的,按照我们平时的思维,char占一个字节,int占四个字节,所以这个结构体应该是1+4+1=6个字节,我们来看一下运行结果是什么。

运行结果居然是12,这和我们预期的不一样,说明我们想错了,看来结构体的内存大小和一般的变量确实不一样。
下面来介绍一下结构体的对齐规则:

    第一个成员在与结构体变量偏移量为0的地址处。其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
    对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
    (VS中默认的值为8)结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
    体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

这些话很难理解,我们就通过上面这个示例代码来解释一下上面的话。

这样存储难免有空间的浪费。
还有结构体嵌套时的内存大小,我们来看这个例子:

运行结果为:

我们来看一下为什么是这样,嵌套结构体的运算规则是:嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

本篇文章内容结束,感谢大家观看。如果意见或建议,可以在评论区留言,您的点赞是我更新的动力。我们下篇文章再见。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779013.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号