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

【c语言】五大内存区域 | 堆区详解

创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡>𖥦<)!! 

主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

c语言系列专栏: c语言之路重点知识整合   

相关知识点:c语言全局变量、局部变量详解 

 

目录

内存区域分为:

栈区:

堆区:

堆区和栈区的区别


内存区域分为:

代码区code zone、常数区constant zone、全局变量区global zone、栈区stack zone、堆区heap zone。

 例:

#include <stdio.h>
int sum(int a,int b)    //sum 代码区    a b栈区
{static int c;    //c 全局变量区c=a+b;return c;
}
int q;    //q全局变量区
int main ()
{printf("%d\n",sum(1,2));    // 1 2常数区return 0;    // 0 常数区
}

1 代码区用来存放函数{ }内流程结构中的代码

2 常数区存放不可改变的常数

3 全局变量区存放全局变量和静态变量

4 栈区存放局部变量

5 堆区存放大量的数据

栈区:

对于栈区中的局部变量,函数调用才进行创建,函数执行完就会被自动回收 

例:

调用完函数再打印其中的局部变量: 

#include <stdio.h>
int* func()
{int a;a = 10;return &a;
}int main()
{/*栈区*/int* p = func();printf("%d\n", *p);printf("%d\n", *p);printf("%d\n", *p);return 0;
}

堆区:

如果栈区内的局部变量不想被自动回收,持续有效,就可以手动使用malloc将堆区创建一个存储空间并把局部变量存放进去,该数据如果不被手动回收,就会一直存放在堆区中。 

#include <stdio.h>
#include <malloc.h>int* func()
{int a;a = 10;return &a;
}int main()
{	int* m = malloc(sizeof(int));      //一个数据    申请4字节的空间int* mm = malloc(sizeof(int) * 5); //5个数据*m = 9;        //利用*p对堆空间进行数据存取mm[3] = 5;     //数组方式free(m);free(mm);	//释放堆内存m = NULL;	//指向空指针mm = NULL;

 (calloc同样分配堆空间,只是赋予初始值为0,malloc不会被初始化,值是未知的)

堆区和栈区的区别

     1.分配方式不同:堆区只有在遇到malloc才会创建  栈区在函数调用全部创建完
     2.栈区:临时性、少量的数据    堆区:持续的、大量的数据
     3.管理方式不同:栈区自动  堆区手动
     4.堆区分配的空间更大
     5.都是延伸性增长,方向不同
     6.堆区容易产生碎片 free   栈区自动创建回收不会产生碎片
    (不释放的安全隐患,占用内存空间导致程序不能正常运行)

 

大家的点赞、收藏、关注将是我更新的最大动力!欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容! 

http://www.lryc.cn/news/63103.html

相关文章:

  • 【JavaScript】动态表格
  • Css如何优雅的实现抽奖转盘
  • 在Java的小问题
  • HashMap的扩容机制、初始化容量大小的选择、容量为什么是2的次幂
  • [jenkins自动化2]: linux自动化部署方式之流水线(下篇)
  • idea使用 ( 二 ) 创建java项目
  • RabbitMq-接收消息+redis消费者重复接收
  • Orangepi Zero2 全志H616简介
  • Golang每日一练(leetDay0047)
  • HCL Nomad Web 1.0.7发布和新功能验证
  • 春招网申简历填写三技巧
  • 计算机网络基础知识总结
  • (下)苹果有开源,但又怎样呢?
  • row_number 和 cte 使用实例:考场监考安排
  • 2023天梯赛记录
  • 被吐槽 GitHub仓 库太大,直接 600M 瘦身到 6M,这下舒服了
  • OpenGL(三)——着色器
  • 【MySQL】单表查询
  • 第一章 安装Unity
  • 20230425----重返学习-vue项目-vue自定义指令-vue-cli的配置
  • el-input 只能输入整数(包括正数、负数、0)或者只能输入整数(包括正数、负数、0)和小数
  • Docker Compose的常用命令与docker-compose.yml脚本属性配置
  • with语句和上下文管理器(py编程)
  • 《JavaEE初阶》HTTP协议和HTTPS
  • 微信小程序 | 基于高德地图+ChatGPT实现旅游规划小程序
  • Excel技能之实用技巧,高手私藏
  • 黑马程序员Java零基础视频教程笔记-运算符
  • Microsoft Data Loss Prevention(DLP)部署方案
  • win系统使用frp端口映射实现内网穿透,配置“任务计划程序”提高稳定性
  • python工具方法 39 大图裁剪为小图|小图还原成大图(含生成大图伪标签)