【C/C++底层】内存分配:栈区(Stack)与堆区(Heap)

news/2024/10/22 17:23:27/
/*** @poject          * @author			jUicE_g2R(qq:3406291309)* @file            底层内存分配:栈区(Stack)与堆区(Heap)* * @language        C/C++* @EDA				Base on MVS2022* @editor			Obsidian(黑曜石笔记软件)* * @copyright		2023* @COPYRIGHT	    原创学习笔记:转载需获得博主本人同意,且需标明转载源*/

程序的内存分配

  • 由 开发者手动 分配内存
    堆区(Heap)

  • 由 编译器自动 分配内存
    栈区(Stack)
    全局区(静态区)(Static)
    代码区(Text)
    常量区


文章目录

  • 1 栈区(Stack)
    • 1-1 存放
    • 1-2 存入操作
    • 1-3 Stack中变量的生命周期
    • 1-4 分配
  • 2 堆区(Heap)
    • 2-1 手动分配
    • 2-2 (最好是)手动销毁
    • 2-3 分配

在这里插入图片描述

1 栈区(Stack)

1-1 存放

  • 存放的是 “暂时” 的变量
    函数的形参与返回值,函数内定义产生的局部变量。

1-2 存入操作

  • 类似于 这种数据类型
    存入栈区的变量有个典型的特点是 先进后出(现象:压栈),递归函数 正是利用这一特点实现递归的。

1-3 Stack中变量的生命周期

  • 栈区变量的生命周期取决于 其变量自身的作用域
    在对应函数的调用期间,编译器对这类数据在这段时间自动进行 开辟、回收内存操作。

1-4 分配

  • 栈区 向低地址拓展(向下),是连续的内存区域
  • 注:虽然是分配动态的,但是这种数据分配形式是不灵活的(局部变量在函数执行完就被编译器直接清除了,万一我不想你编译器清除呢?),且栈区的大小也是有限的(空间大小一般是2M)。

2 堆区(Heap)

  • 一般存放指针(注:一定不是野指针)

2-1 手动分配

//.c
p = (DataType* )malloc(sizeof(DataType));//DataType=int,double...
//.cpp
DataType* p1 = (DataType* )malloc(sizeof(DataType));DataType=int,double...
DataType* p2 = new DataType;//DataType=int,double,ClassName(StructName)...

2-2 (最好是)手动销毁

  • 不手动销毁可能存在内存泄漏的缺陷
//.c
free(p);
  • 最好是配对的
    m a l l o c malloc malloc f r e e free free
    n e w new new d e l e t e delete delete
//.cpp
free(p1);
delete(p2);

2-3 分配

  • 1、堆区 向高地址扩展(向上),是不连续的内存区域。是由系统用 链表 存储
  • 2、比栈区分配慢
  • 3、灵活,但存在 内存泄漏 的可能

http://www.ppmy.cn/news/1217753.html

相关文章

Arduino驱动SHT1x系列数字温湿度传感器(温湿度传感器)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 瑞士Sensirion公司推出了SHT1x单片数字温湿度集成传感器。采用CMOS微加工专利技术(CMOSenstechnology),确保产品具有极高的可靠性和出色的长期稳定性。该传感器由1个电容式聚合体测湿元件和1个能隙式测温元件组成…

iText v1.8.1(OCR截图文字识别工具)

iText for mac是一款OCR(光学字符识别)工具,可以从图片中识别文字,适用于从扫描版的PDF等任意图片中提取文字。 使用iText,您可以方便快捷地从图片中摘抄和批注文字,满足您的各种需求。其自带截图功能&…

目标检测问题总结

目标检测问题总结 目标检测二阶段和一阶段的核心区别目标检测二阶段比一阶段的算法精度高的原因1. 正负样本不平衡2.样本的不一致性 如何解决目标检测中遮挡问题如何解决动态目标检测FPN的作用如何解决训练数据样本过少的问题IOU代码实现NMS代码实现NMS的改进思路 目标检测二阶…

买房和租房哪个划算?

目录 1、考虑因素 1. 1费用比较 1.2 资产增值 1.3 税收影响 1.4 灵活性 1.5 贷款利率 1.6 长期计划 1.7 当地市场条件 2、买房计算 2.1等额本息 2.2等额本金 3、租房计算 1、考虑因素 在比较买房和租房哪个更划算时,需要考虑多个因素。以下是一些可以考…

Qt数据库之QSqlQueryModel

创建数据模型: QSqlQueryModel *qryModel; //数据模型 qryModelnew QSqlQueryModel(this);qryModel->setQuery("SELECT empNo, Name, Gender, Height, Birthday, Mobile, Province, City, Department, "" Education, Salary FROM employee ORDE…

No204.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

WebStorm配置less编译wxss或css

文章目录 前言先下载安装less程序:实参:要刷新的输出路径成功 前言 使用WebStorm写微信小程序,wxss写着很麻烦,就想着用less,接下来是配置less编译 先下载安装less npm install -g lessless会安装在你当前目录下(以D…

说说对Redux中间件的理解?常用的中间件有哪些?实现原理?

一、是什么 中间件(Middleware)是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的 在上篇文章中,了解到了Redux整个工作流程,当action发出之后,reducer立…