当前位置: 首页 > news >正文

C语言内存管理说明,存储方式

对于C语言来说,根据分配方式的不同,数据的存储方式如下所示。

从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,例如全局变量,static变量等。在栈上创建。在执行函数时,函数内非static局部变量的存储单元都是在栈上创建的,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中 ,效率很高,但是分配的内存容量有限。从堆上分配,亦称动态内存分配。程序在运行的时候用malloc/relloc/calloc等函数申请的内存,程序员自己负责在何时用free释放内存。动态内存的生存期由程序员决定,使用非常灵活;但同时遇到问题也最多,例如内存泄漏、内存越界、野指针问题;此外即使规避了上述问题,在嵌入式环境下,因为内存较小,碎片化问题也可能导致处理失败。

当然还有一些变量不属于上述区域,如const声明的变量存储在只读存储区,对于单片机往往被分配到FLASH区域。

这里从C语言实例来说明,具体如下所示。

#include #include int ex_val; // 全局变量 int ex_val_init = 100; // 带初始化的全局变量 static int st_val; // 静态变量 static int st_val_init = 100; // 带初始化的的静态变量 int main(int argc, char *argv[]) { int local_val; // 局部变量 static int static_local_val = 0; // 带初始化的静态局部变量 int *p; static_local_val += 1; // 动态内存分配,堆内存 p = malloc(sizeof(int)); if (p != NULL) { *p = 100; printf("*p: %d\n", *p); free(p); p = NULL; } printf("ex_val: %d\n", ex_val); printf("st_val: %d\n", st_val); printf("local_val: %d\n", local_val); printf("static_local_val: %d\n", static_local_val); return 0; }

关于上述代码,执行结果如下所示。

C语言的作用域不仅描述了标识符的可访问的区域,其实也规定了变量的存储区域。

对于变量的初始化问题,全局变量和静态变量在编译时,一般会被编译器默认初始化为0。而局部变量和动态分配的内存则被分配为之前使用过的栈地址和堆地址,内部的值是不确定的。如果不进行初始化,在使用时也没有设置直接就使用作为判断条件,就会出现偶发性的出错问题。这个问题其实解释清楚涉及软件平台、编译器处理问题,可能都有所不同。因此不建议去根据平台、编译器处理方法进行判断,而是**变量在声明时,一律进行初始化**,避免出现这类问题。

http://www.zskr.cn/news/1490431.html

相关文章:

  • Spring AI 1.x 系列【43】基于标准输入输出 (STDIO) 与服务端推送事件 (SSE) 的 MCP 服务端
  • 高光谱图像修复技术:HSI-VAR架构与实战应用
  • 保姆级教程:手把手教你搞定华为USG6000V防火墙的跨版本升级(含固件下载与密码重置)
  • Redis分布式锁进阶第三十二篇
  • 告别手动标注!用飞桨EasyDL的‘魔术笔’10分钟搞定4000张语义分割图
  • 2026年靠谱的镀锌桥架/防火桥架用户口碑推荐厂家 - 行业平台推荐
  • GD32F405RGT6 SPI主从模式实战:手把手教你用逻辑分析仪调试时序(附完整工程)
  • 每一个你习以为常的 PHP 特性背后,都站着一个伟大的 CS 原理。
  • Multisim仿真差动放大电路:从单端/双端输入到共模抑制比,一次搞懂所有测量(附实验数据对比)
  • 2026年评价高的四川铝合金桥架/四川桥架/四川梯式桥架厂家综合对比分析 - 品牌宣传支持者
  • 为什么越来越多人选择聚合平台,而不是独个AI:GPT、Claude、Gemini?
  • 2026图片去水印工具推荐,免费图片去水印工具合集
  • 终极宝可梦存档编辑器:PKHeX.Mobile移动端跨世代精灵管理完全指南
  • 毕业设计救星:如何用最少的外设搞定一个功能齐全的STM32篮球记分器?
  • 碧蓝航线全皮肤免费解锁:Perseus开源脚本补丁完整配置指南
  • 【C++】类与对象之类的默认成员函数(二)
  • JD_AutoComment:京东自动评价脚本深度解析与实战指南
  • 2026年6月国内误码率测试仪品牌排行实测盘点:可调谐激光光源、多模光衰减器、多通道光功率计、宽带光源、插回损测试仪选择指南 - 优质品牌商家
  • 助睿数据大屏实验:手把手教你搭建浏览器市场分析大屏
  • 别再只会抓包了!用Fiddler Classic这5个隐藏功能,让你的接口调试效率翻倍
  • GmSSL国密算法实战指南:构建安全通信系统的5个关键技术方案
  • IDEA 2021.3.2 遇到 Maven 依赖拉取失败?别慌,这招教你搞定 maven-default-http-blocker 报错
  • Windows文件管理器优化实战:解密MyComputerManager的注册表清理与自定义管理技术
  • 超越MOTA:深入解读AB3DMOT提出的新指标AMOTA/sAMOTA,以及如何用它们评估你的跟踪模型
  • 2026年口碑好的乳山正规宠物医院/宠物医院/乳山宠物医院热门推荐 - 行业平台推荐
  • 从音频ADC到工业测量:聊聊ADS1274/1278这颗“跨界”芯片的选型与设计思路
  • 别再死记硬背了!用Multisim 14.2仿真带你彻底搞懂差分放大电路的四种输入输出模式
  • 毫米波与太赫兹信道测量中的功率校正技术
  • Typora收费后,我找到了这款完全开源免费的Markdown编辑器MarkText,附详细安装与主题配置教程
  • VMware Workstation 17 Pro玩家必备:让CentOS 8虚拟机丝滑运行的Tools安装与优化指南