news 2026/4/18 9:41:12

【时时三省】(C语言基础)结构体的内存对齐

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【时时三省】(C语言基础)结构体的内存对齐

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

例题1:

这个结构体一共占多少个字节呢?

如果按每个类型的大小,然后加在一起来算的话,就是14个字节

但是14个字节是不对的

结构体的字节不是这样算的

这是为什么呢,就要来聊一下他的内存分布

内存是不会挤在一起的,比如double类型的a 在内存中后面不会直接跟着char类型的b

它是有一个规则的

确定变量位置:只能放在自己类型整数倍的内存地址上

就比如double类型的a,要往内存地址为0的这个地方存储,就是要看零是不是八的整数倍,很明显0是的,所以a就可以存进去,一直存8个字节,存到了7(因为是从0开始,存8个字节就是到7),都是变量a的空间

然后开始存变量b,变量b是占一个字节,8正好是1的整数倍,所以也可以存进去,就存到了8

然后开始存int类型的变量c,是占4个字节,9不是4的整数倍,所以需要存在12,12是离4最近的整数倍,存4个字节就到了15。9-11这块内存空间就空着了,c语言会自动填补3个空白字节在这里。

然后看最后一个变量d,是占1个字节,1的整数倍正好有16 所以就可以直接存进去

这四个变量存进去之后还没有完,这四个变量不是单独定义在函数中的普通变量,而是定义在结构体当中的,所以结构体额外还有一个规则,就是最后一个数据的补位情况

最后一个补位:结构体的总大小,是最大类型的整数倍

上面那个结构体的最大类型是double类型,所以他这个结构体所占用的总字节一定是八的整数倍,现在一共占用了17个字节,17不是8的整数倍,所以在变量d的后面还要继续补空白字节,补了7个空白字节,所以这个结构体一共占了24个字节。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 4:03:35

Git分支命令

切换到新分支 git checkout new_branch 基于当前所在的分支创建新分支 git branch new_branch 基于当前所在的分支创建新分支&&切换到新分支 git checkout -b new_branch 基于远程分支创建本地新分支&&切换到新分支 git checkout -b branchA origin/br…

作者头像 李华
网站建设 2026/4/18 4:03:42

7.1 Kubernetes集群运维实战:节点管理、证书更新、版本升级完整指南

7.1 Kubernetes集群运维实战:节点管理、证书更新、版本升级完整指南 引言 集群运维是Kubernetes生产环境的重要工作。通过节点管理、证书更新、版本升级等操作,可以保持集群的稳定运行。本文将详细介绍集群运维的完整流程。 一、节点管理 1.1 节点维护 # 标记节点不可调…

作者头像 李华
网站建设 2026/4/18 4:02:15

模板元编程应用场景

1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_if find(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第…

作者头像 李华
网站建设 2026/4/17 13:18:09

内存破坏调试技巧

1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_if find(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第…

作者头像 李华
网站建设 2026/4/18 3:59:18

AI产品经理核心能力图谱:不只是写Prompt,这些能力才是关键!

文章解析了AI产品经理与传统产品经理的本质区别,阐述了三大职责(需求定义、跨域协同、效果迭代)和四大核心能力(技术理解力、业务洞察力、数据敏感度、风险把控力)。AI产品经理不是简单会写Prompt,而是需要…

作者头像 李华
网站建设 2026/4/18 4:05:02

物种分布曲线的五个矩

物种分布曲线的五个矩 引言 正文 第一个矩:均值(一阶矩) 第二个矩:方差 σ 2 \sigma^2 σ2 (二阶中心矩) 第三个矩:偏度(Skewness,三阶标准化矩) 第四个矩:峰度(Kurtosis,四阶标准化矩) 第五个矩:五阶矩(Hyperskewness / Tail asymmetry) 绘图代码 Author: JiJi …

作者头像 李华