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

news2024/11/24 6:59:54

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

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

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

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.coloradmin.cn/o/472596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Paimon: Streaming data lake 数据湖项目的后起之秀

什么是Paimon? Paimon的官网介绍是&#xff1a;Streaming data lake platform with high-speed data ingestion, changelog tracking and efficient real-time analytics. Paimon 是流数据湖平台&#xff0c;具有高速数据摄取、变更日志跟踪和高效的实时分析能力 数据湖是大…

unity什么是曲线动画?

介绍 unity什么是曲线动画&#xff1f; 在Unity中&#xff0c;曲线动画&#xff08;Curve Animation&#xff09;是一种基于曲线的动画系统&#xff0c;它允许你通过在时间轴上编辑曲线来控制游戏对象的某个属性在时间上的变化。曲线动画可以用于很多方面&#xff0c;比如控制…

Linux套接字编程-2

在上一篇博客中&#xff0c;我们先对套接字编程的内容进行了一个简单涵盖&#xff0c;并详细陈述了UDP协议内容。本篇我们承接上文&#xff0c;讲述完UDP后&#xff0c;我们来讲解TCP。 目录 1.TCP协议 1.1通信两端流程 1.1.1服务端流程 1.1.2客户端流程 1.2套接字相关操…

LeCun、田渊栋参与撰写,70页「自监督学习」大全

来源 | 机器之心 微信号&#xff1a;almosthuman2014 「关于自监督学习&#xff0c;你想知道但又不敢问的一切都在这里了。」图灵奖得主、Meta 人工智能首席科学家 Yann LeCun 刚刚发了这样一则推文。 在推文中&#xff0c;LeCun 介绍了他和 Meta 人工智能研究院研究员、研究经…

数据结构学习记录——判断是否为同一颗二叉搜索树(题意理解、求解思路、程序搭建框架、具体函数的实现)

目录 题意理解 问题 描述 输入样例 输出样例 求解思路 建两棵二叉树 不建树 建一棵树 搜索树表示 程序框架搭建 如何建搜索树 如何判别 方法 查找函数 判断函数 其他函数 题意理解 给定一个插入序列就可以唯一确定一颗二叉搜索树。 但是&#xff0c;一颗给定…

libigl添加Viewer Menu时出现imgui相关的错误:无法打开包括文件: “imgui.h”: No such file or directory

libigl添加如下图所示的Viewer Menu时&#xff0c;出现了“无法打开包括文件: “imgui.h”: No such file or directory”的错误 很显然是libigl内嵌的imgui出了问题 从项目路径libigl-example-project-main\out\build\x64-Release\_deps\libigl-src\include\igl\opengl\glfw\…

【谷粒商城之CompletableFuture异步编排】

本笔记内容为尚硅谷谷粒商城CompletableFuture异步编排部分 目录 一、线程回顾 1 、初始化线程的 4 种方式 2.、线程池的七大参数 运行流程&#xff1a; 3、常见的4种线程池 4、开发中为什么使用线程池 二、CompletableFuture 异步编排 业务场景 1、创建异步对象 …

无线化超轻薄,香港城市大学体感反馈贴片WeTac

此前&#xff0c;青亭网曾报道香港城市大学与腾讯Robotics X Lab合作研发的低电压体感方案&#xff0c;原理是通过微电流刺激来模拟触觉&#xff0c;可模拟微小物体的体感。近期&#xff0c;香港城市大学的一组科研人员也公布了一项类似的方案&#xff1a;WeTac&#xff0c;该方…

轻松上手:使用VSCode调试Python模块级代码的完整教程

安装VSCode&#xff1a;请确保已经安装了Visual Studio Code。安装Python插件&#xff1a;在VSCode中&#xff0c;转到Extensions视图 (View -> Extensions) 并搜索"Python"。找到由Microsoft提供的插件并点击安装。重启VSCode以确保插件安装正确。准备项目&#…

边听歌边充电LDR6028+LDR9201既能充电又能OTG方案

随着type-c接口的普及&#xff0c;市面上的手机&#xff0c;平板&#xff0c;笔电逐渐都采用了type-c接口&#xff0c;设备为了不断的追求更轻薄的机身和防水要求慢慢的取消了一些影响手机外观完整性的接口&#xff0c;比如3.5mm耳机孔。 有线耳机用户一般会选择使用C口转3.5m…

资深架构师解读零代码开发平台—如何不写代码实现流程审批

审批节点 “审批节点&#xff1a;” 流程中涉及审批时&#xff0c;需要用到审批节点。审批可通过或者驳回&#xff0c;也可以发送通知。可以多人会签/或签审批。 1. 审批节点 1.1 审批设置 ① 审批方式 审批方式默认为或签方式&#xff0c;只一个人审批即可 当选择会签时&#…

【英语】大学英语CET考试,口语考试介绍与备考1(讲义笔记)

文章目录 1、考试基本信息2、考试题型介绍3.1 短文朗读与回答问题&#xff08;语音篇&#xff09;3.1.1 语音篇真题3.1.2 语音篇6项基础知识3.1.3 语音语调练习&#xff08;名言名句&#xff09;3.1.4 短文朗读练习材料&#xff08;真题&#xff09; 3.2 自我介绍与看图说话&am…

IC面试,你一定要准备好这些(内附大厂面试题目)

大家都知道&#xff0c;面试的表现会对于个人职业发展的重要性&#xff0c;不仅能决定是否录用&#xff0c;还会影响到后期的谈薪&#xff0c;所以面试前一定要做好充分的准备。 怎么准备面试&#xff1f; 这里就建议简历上的表述尽量客观化、专业化&#xff0c;多使用数字和…

目标跟踪综述 (持续更新)

这几天对目标跟踪挺感兴趣的&#xff0c;但是在CSDN和知乎上面找的相关介绍资料都看的一知半解&#xff0c;所以自己找了一篇 2022-04-26 发表的综述文章作下笔记学习下。 目录 一、基于相关滤波的目标跟踪算法 1、相关滤波视频目标跟踪算法的框架 2、相关滤波目标跟踪算法…

GPT-4开源平替miniGPT-4来了,仅需23G显存单机可run,附论文、项目代码地址

来源 | 新智元 微信号&#xff1a;AI-era 先是ChatGPT的发布给世界带来了一点小小的NLP震撼&#xff0c;随后发布的GPT-4更是破圈计算机视觉&#xff0c;展现了非凡的多模态能力。 不光能读懂人类的梗&#xff0c;给个手绘草图甚至可以直接写出网站的代码&#xff0c;彻底颠覆…

百度地图 TypeError: Cannot set properties of undefined (setting ‘Bm‘)

这类问题出现的原因一般是&#xff0c;页面还没有加载完&#xff0c;地图开始加载&#xff0c;或者地图加载在页面加载之前 在项目中&#xff0c;我用isMapLoading控制地图的加载&#xff0c;false–加载&#xff0c;true–不加载&#xff0c;在data()中设置isMapLoadingtrue

矩阵的秩的计算

definition 1 矩阵的秩 矩阵的列空间的维度 矩阵的零空间的秩 矩阵的自由变量的个数 n - r(A) definition 2 这两个证明很好证 第三个证明可以用零空间的秩 example 1 hyperlink

HTTPS建立连接原理、SSL工作原理

HTTPS与HTTP相比有什么区别&#xff1f; HTTPS保证安全的原理是什么&#xff1f; HTTPS是如何建立连接的&#xff1f; 巨人的肩膀 3.1 HTTP 常见面试题 | 小林coding HTTP与HTTPS的区别 HTTP是超文本传输协议&#xff0c;传输的内容是明文(HTTP1.1及之前版本)。HTTPS在TCP与HT…

【LeetCode】27. 移除元素

题目链接&#xff1a;https://leetcode.cn/problems/remove-element/ &#x1f4d5;题目要求&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;…

【原创】生成文件MD5图像,类似于GitHub的像素风格头像

前言 我想通过文件的md5生成关于这个md5的图像&#xff0c;类似于GitHub的随机像素头像&#xff0c;用处是让这个md5更加直观&#xff0c;也能用于生成各种用户头像&#xff0c;跟GitHub一样。 网上搜了一下&#xff0c;没有现成的方法&#xff0c;只能有一篇类似的文章可以借…