news 2026/5/4 11:30: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/5/1 6:16:06

零基础进阶大模型实战高手:从Transformer到企业级部署全攻略

《动手构建大模型》为零基础读者提供了一条从理论到实践的大模型学习路径。全书分为基础理论、核心技术和高阶应用三篇,涵盖Transformer架构、提示词工程、RAG、框架工具使用、智能体构建、微调及模型部署等内容。采用实战导向的项目驱动学习方法,提供Go…

作者头像 李华
网站建设 2026/5/1 17:21:23

智能文档处理全栈指南:从OCR到VLM智能体的技术演进与AWS Serverless实践

本文详细介绍了智能文档处理技术的三个演进阶段:从Tesseract规则匹配到PaddleOCR深度学习,再到基于VLM智能体的端到端解析。文章探讨了如何通过布局检测、阅读逻辑排序和视觉工具链实现文档智能化,并介绍了使用AWS Serverless与LandingAI ADE…

作者头像 李华
网站建设 2026/5/1 13:14:57

模型服务化这件事:从 Batch 到 Stream,不只是改个部署方式那么简单

模型服务化这件事:从 Batch 到 Stream,不只是改个部署方式那么简单 说句掏心窝子的实话: 绝大多数模型“死”在部署阶段,不是死在算法上。 训练时 AUC 飞起、离线评估美如画,一到线上就翻车——延迟高、数据对不上、效…

作者头像 李华
网站建设 2026/5/2 14:24:01

【回眸】Polyspace教程(一) 小白使用篇

前言 最近公司换工具换的比较频繁,几乎全换了一遍,QAC也和Tessy一样淡出了工具栏。最近开始学习使用Polyspace,乘记忆还新鲜,出个使用Guide记录一下,攒攒人品。 软件信息 软件身份确认 软件名称:Polyspace Code Prover™(含桌面版、服务器版) 所属公司:The MathWor…

作者头像 李华