C语言内存管理——内存对齐与共用体union
C语言内存管理——内存对齐与共用体union前言在C语言中内存管理是程序员必须掌握的核心技能。本文将深入探讨两个重要概念内存对齐和共用体union。理解它们不仅能帮你写出更高效的代码还能在面试中脱颖而出。一、内存对齐1.1 什么是内存对齐不管是结构体还是普通的变量都存在内存对齐的现象。简单来说内存对齐就是数据只能存放在自己类型整数倍的内存地址上。对齐规则数据只能放在自己类型整数倍的内存地址上。简单理解内存地址 ÷ 占用字节 可以整除。1.2 常见类型的对齐规则数据类型占用字节对齐要求char1字节内存地址能被1整除任意位置short2字节内存地址能被2整除int / float4字节内存地址能被4整除long long / double8字节内存地址能被8整除1.3 结构体的内存对齐结构体的内存对齐在上面的基础上又多了一条规则⚠️结构体总大小规则结构体的总大小必须是其内部最大类型的整数倍用来确定最后一个数据补位的情况。来看一个例子structExample{chara;// 1字节intb;// 4字节charc;// 1字节};// 内存布局假设起始地址为0// 地址0: a (char, 1字节)// 地址1-3: 补3个空字节int需要4字节对齐// 地址4-7: b (int, 4字节)// 地址8: c (char, 1字节)// 地址9-11: 补3个空字节总大小需是int的整数倍即4的倍数// 总大小12字节注意对齐的时候会补空白字节但是不会改变原本字节的大小。char补位之后本身还是1个字节。1.4 优化技巧为了节约空间我们通常会把小的数据类型写在最上面大的数据类型写在最下面。// 优化前12字节structBad{chara;// 1字节intb;// 4字节charc;// 1字节};// 优化后8字节structGood{chara;// 1字节charc;// 1字节小的放一起intb;// 4字节};只是调整了成员顺序就从12字节减少到了8字节节省了33%的空间二、共用体union2.1 什么是共用体共用体也叫联合体、共同体是一种特殊的数据类型。它的特点是所有成员共享同一块内存空间。2.2 共用体的特点所有的变量都使用同一个内存空间每次只能给一个变量进行赋值因为第二次赋值时会覆盖原有的数据所占的内存大小 最大成员的长度也受内存对齐影响#includestdio.hunionData{inti;floatf;charc;};intmain(){unionData data;data.i10;printf(i %d\n,data.i);// i 10data.f3.14f;printf(f %.2f\n,data.f);// f 3.14printf(i %d\n,data.i);// i的值被覆盖了变成垃圾值printf(sizeof(union Data) %zu\n,sizeof(unionData));// 4字节return0;}2.3 共用体的内存大小以最大的单个成员的长度为准总大小一定是最大单个成员的整数倍同样受内存对齐规则的影响三、结构体和共用体的区别对比项结构体 struct共用体 union含义一种事物中包含多个属性一个属性有多种类型存储方式各存各的互不影响存一起多次存会覆盖内存占用各个变量的总和受内存对齐影响最大类型的大小受内存对齐影响使用场景描述一个对象的多个属性节省内存、类型转换、协议解析四、总结内存对齐是CPU访问效率的优化机制记住小的放前面的优化原则共用体所有成员共享内存适合同一时间只用一种类型的场景结构体 vs 共用体结构体是与的关系共用体是或的关系掌握这些内存管理的细节能让你对C语言的底层机制有更深刻的理解。

相关新闻

Selenium IDE入门指南:从录制回放到Python脚本的自动化测试实践

Selenium IDE入门指南:从录制回放到Python脚本的自动化测试实践

1. 项目概述:为什么你需要掌握Selenium IDE? 如果你正在看这篇文章,大概率是遇到了需要重复操作网页的烦心事儿。可能是每天要登录后台下载报表,或者需要批量处理一堆表单数据,又或者想验证某个网页功能是否正常。手动…

2026/7/5 3:46:35阅读更多 →
GWAS中的常用结果

GWAS中的常用结果

等位基因知识回顾: 例如这里说的 6:31,358,386 C / G 位置和等位基因。 C / G,意思就是等位基因就是 C 或 G 其中一个。一个人有两个等位基因,因为有两条 6 号染色体。 比如这个 SNP 位点: 一个人的基因型这个人有几个 C有几个…

2026/7/5 3:46:35阅读更多 →
概念性的东西暂就不说了,说多了都是故事。现在我们来谈谈各种缓存。

概念性的东西暂就不说了,说多了都是故事。现在我们来谈谈各种缓存。

初学.NET的朋友开始就会接触到DataSet类,云里雾里的看着DataSet的例子程序,也不管是咋回事,用就是了。其实DataSet就是缓存,当我们去读取一段数据集合的时候,如果每读取一条数据就处理一条的话,那么我们的程…

2026/7/5 3:41:35阅读更多 →
Audacity音频编辑:从零开始掌握专业级免费音频处理工具

Audacity音频编辑:从零开始掌握专业级免费音频处理工具

Audacity音频编辑:从零开始掌握专业级免费音频处理工具 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity 想要进行音频编辑却苦于高昂的软件费用?Audacity为您提供了完美的解决方案——这是一…

2026/7/5 5:01:40阅读更多 →
GPT-5.5与Codex平台:AI智能体如何重塑编程与知识工作流

GPT-5.5与Codex平台:AI智能体如何重塑编程与知识工作流

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 如果你还在用 ChatGPT 处理复杂的编程、数据分析或文档工作,那么你可能已经落后了。OpenAI 内部超过 85% 的员工&#xff…

2026/7/5 5:01:40阅读更多 →
【Bug已解决】Claude Code Auto-update failed 自动更新失败的解决方案

【Bug已解决】Claude Code Auto-update failed 自动更新失败的解决方案

【Bug已解决】Claude Code Auto-update failed 自动更新失败的解决方案 1. 问题描述 Claude Code 默认会在启动时静默检查更新,很多人在某次启动后突然发现命令彻底不能用了,报错信息通常类似: Auto-update failed Error: EACCES: permission…

2026/7/5 5:01:40阅读更多 →
致焦虑症者

致焦虑症者

致焦虑者: 焦虑者往往对自身(无力量、无价值、脆弱)、世界(敌意、危险、无法预测)和未来(充满威胁、灾难和陷阱,要小心提防)抱有消极的看法。

2026/7/5 5:01:40阅读更多 →
如何快速搭建Minecraft模组开发环境:ForgeGradle终极指南

如何快速搭建Minecraft模组开发环境:ForgeGradle终极指南

如何快速搭建Minecraft模组开发环境:ForgeGradle终极指南 【免费下载链接】ForgeGradle Minecraft mod development framework used by Forge and FML for the gradle build system 项目地址: https://gitcode.com/gh_mirrors/fo/ForgeGradle 想要开启Minecr…

2026/7/5 5:01:40阅读更多 →
SOA与DDD的定义

SOA与DDD的定义

SOA与DDD都是常用的系统架构,但两者之间所针对的核心是不同的。 SOA(面向服务架构)由Gartner 在1996年提出来,它是一种分布式的软件架构,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行部署、组合和使用。简单…

2026/7/5 4:56:39阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →