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

/*** @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.rhkb.cn/news/191997.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux应用层点亮硬件的LED灯

一 应用层操作硬件的两种方法 应用层想要对底层硬件进行操控,通常可以通过两种方式: /dev/目录下的设备文件(设备节点);/sys/目录下设备的属性文件。 具体使用哪种方式需要根据不同功能类型设备进行选择,通…

保序回归:拯救你的校准曲线(APP)

保序回归:拯救你的校准曲线(APP) 校准曲线之所以是评价模型效能的重要指标是因为,校准曲线衡量模型预测概率与实际发生概率之间的一致性,它可以帮助我们了解模型的预测结果是否可信。一个理想的模型应该能够准确地预测…

Python 框架学习 Django篇 (十) Redis 缓存

开发服务器系统的时候,程序的性能是至关重要的。经过我们前面框架的学习,得知一个请求的处理基本分为接受http请求、数据库处理、返回json数据,而这3个部分中就属链接数据库请求的响应速度最慢,因为数据库操作涉及到数据库服务处理…

深入了解springmvc响应数据

目录 一、前后端分离开发与混合开发 1.1 混合开发模式 1.2 前后端分离模式【重点】 二、页面跳转控制 2.1 通过JSP实现页面跳转 2.2 转发与重定向 三、返回JSON数据 3.1 导包与配置 3.2 使用ResponseBody 四、返回静态资源 4.1 为什么无法直接查询静态资源 4.2 配置…

vscode 访问本地或者远程docker环境

1、vscode 访问docker本地环境 直接点击左下角连接图标,弹出选项可以选择容器,只要容器在本地运行者,选择attach可以看到运行中的容器可以选择,选择其中需要选择的就行 ## 运行容器,可以-d后台运行都可以 docker run…

hadoop 虚拟机配置大数据环境 hadoop(二)

1. 安装epel-release 注:Extra Packages for Enterprise Linux 是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS 和Scientific Liux。相当于是一个软件仓库,大多数rpm 包在官方repository 中是找不到的) 命令: yum install -y epel-relea…

SpringBoot3基础特性

SpringBoot3基础特性 SpringApplication 自定义banner 类路径添加banner.txt或设置spring.banner.location就可以定制banner推荐网站:Spring Boot banner在线生成工具,制作下载英文banner.txt,修改替换banner.txt文字实现自定义。 提示: 可以通过修改配…

为什么数据安全很重要?哪些措施保护数据安全?

数据安全很重要的原因是因为数据是现代社会的重要财产之一。很多组织和企业依赖数据来做出商业决策,管理客户关系,进行财务规划等等。如果这些数据泄露或遭到黑客攻击,那么就会影响企业的经济利益,甚至影响到个人的隐私和安全。此…

VuePress介绍及使用指南

VuePress是一个基于Vue.js的静态网站生成工具,它专注于以Markdown为中心的项目文档。VuePress具有简单易用的特性,同时提供了强大的自定义和扩展性。在本文中,我们将介绍VuePress的基本概念,并提供一个简单的使用指南。 什么是Vue…

Linux shell编程学习笔记25:tty

1 tty的由来 在 1830 年代和 1840 年代,开发了称为电传打字机(teletypewriters)的机器,这些机器可以将发件人在键盘上输入的消息“沿着线路”发送在接收端并打印在纸上。 电传打字机的名称由teletypewriters, 缩短为…

计算机毕业设计 基于SpringBoot的在线考试系统的研究与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

[Hive] INSERT OVERWRITE DIRECTORY要注意的问题

在使用Hive的INSERT OVERWRITE语句时,需要注意以下问题: 数据覆盖:INSERT OVERWRITE语句会覆盖目标目录中的数据。因此,在执行该语句之前,请确保目标目录为空或者你希望覆盖的数据已经不再需要。数据格式:…

香港科技大学广州|智能制造学域机器人与自主系统学域博士招生宣讲会—中国科学技术大学专场

🏠地点:中国科学技术大学西区学生活动中心(一楼)报告厅 【宣讲会专场1】让制造更高效、更智能、更可持续—智能制造学域 🕙时间:2023年11月16日(星期四)18:00 报名链接&#xff1a…

Django视图层()

视图层 django视图层:Django项目下的views.py文件,它的内部是一系列的函数或者是类,用来处理客户端的请求后处理并返回相应的数据 三板斧 HttpResponse # 返回字符串 render # 返回html页面,并且在返回浏览器之前还可以给html文件…

matlab 二自由度操纵稳定性汽车模型

1、内容简介 略 19-可以交流、咨询、答疑 二自由度操纵稳定性汽车模型 二自由度、操纵稳定性、操纵动力学 2、内容说明 1 模型假设 忽略转向系的影响,以前、后轮转角作为输入;汽车只进行平行于地面的平面运动,而忽略悬架的作用&#xf…

linux时间同步

搭建集群时,都会先设置时间同步,否则会出现多种问题。 方式一: 1.安装ntp软件 yum install -y ntp 2.更新时区 删除原有时区:sudo rm -f /etc/localtime 加载新时区:sudo ln -s /usr/share/zoneinfo/Asia/Shangh…

H5游戏源码分享-超级染色体小游戏

H5游戏源码分享-超级染色体小游戏 游戏玩法 不断地扩大发展同颜色的色块 用最少的步数完成游戏 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width,user-scalableno,init…

java实现插入排序

图解 以下是Java实现插入排序的代码&#xff1a; public class InsertionSort {public static void main(String[] args) {int[] arr {5, 2, 4, 6, 1, 3};insertionSort(arr);System.out.println(Arrays.toString(arr)); // output: [1, 2, 3, 4, 5, 6]}public static void i…

Node.js 框架 star 星数量排名——NestJs跃居第二

文章目录 什么是NodeJs?什么是NodeJs框架?图表数据框架排名 什么是NodeJs? Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;它使得我们可以在服务器端使用JavaScript开发高效、可扩展的应用程序。作为一个快速、轻量级的平台&#xff0c;Node.js在Web开发领…

Python爬虫抓取微博数据及热度预测

首先我们需要安装 requests 和 BeautifulSoup 库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install requests pip install beautifulsoup4然后&#xff0c;我们需要导入 requests 和 BeautifulSoup 库&#xff1a; import requests from bs4 import BeautifulSou…