当前位置: 首页 > 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.cnnetsun.cn/news/2836705.html

相关文章:

  • 人生“地震”来临时,你的反应决定了你的结局
  • ODDM-FMCW融合技术在高速移动通信中的应用
  • Hadoop YARN WEB UI保姆级指南:从8088端口看懂集群状态与作业监控
  • 用COMSOL复现经典:一杯水的自然对流仿真,从模型设置到结果后处理全解析
  • 手机App控制51单片机LED?一个HC-06蓝牙模块+串口中断就能搞定(附完整代码)
  • 从吸铁石到自动驾驶:聊聊人工势场法(APF)这个老牌路径规划算法,为什么今天依然值得学?
  • STM32的FMC不止能接内存:驱动TFT屏、AD7606等外设的实战指南
  • Windows Cleaner:拯救C盘爆红的终极解决方案,一键释放空间提升性能
  • SQLite图形化工具选哪个?深度对比SQLite Expert与DB Browser的五大核心功能与隐藏技巧
  • 别再手动下拉了!Excel里用这个公式,1秒搞定上万行时间差计算(附单元格格式设置)
  • 搞定GaN图腾柱PFC的过零点难题:三种无锁相环方案实测与避坑指南
  • PotatoNV:免费解锁华为麒麟设备Bootloader的完整指南
  • 【VGGT】统一3D重建:单网络同时预测相机位姿、深度图、点云与3D轨迹的前馈Transformer架构深度解析
  • 抖音下载神器:如何永久保存你喜欢的视频内容?
  • 计算机毕业设计之电商客户消费特征数据分析
  • 从Dijkstra到A*:手把手教你用Python实现路径规划算法(避坑Octile距离计算)
  • 基于OpenPose的实时跌倒与异常动作检测系统(含可直接运行的Python工程+训练模型+测试视频)
  • 基于Spring AI框架的RAG应用
  • Winhance中文版:Windows系统优化的终极免费解决方案
  • 室内调试没信号?EVB_Air551G定位模块的‘踩坑’实录与户外快速测试指南
  • 从单机到协作:手把手教你用Kettle数据库资源库实现团队ETL流程共享(附权限管理)
  • 苹果审核2.1大礼包别慌!我从被拒到过审用了2天
  • FIO参数太多看不懂?一张图帮你搞定磁盘性能测试,附送常用场景命令模板
  • 深度解析Mindustry服务器架构:从源码编译到高可用部署的实践指南
  • 米脂县酒店选型指南:如何从“性价比”角度做理性判断
  • 一个平台,全面保护:云祺破解混合架构难题,筑牢业务备份基座
  • WPS表格转换踩坑实录:逗号、空格用不对,格式全乱!附正确设置图解
  • 程序员的“自带干粮”困境:当公司连 Token 都要员工自费,我们该如何优雅地反击?
  • 2026年居然找到家不踩雷的花照壁网咖?
  • Python 开发环境配置繁琐?PyCharm 2026.1 Mac IDE 一站式解决