【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
p1 = (DataType*)malloc(sizeof(DataType));DataType=int,double...
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、灵活,但存在 内存泄漏 的可能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/145464.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图文示例:Python程序的运行原理解读

文章目录 一、编译型语言(C语言为例)二、动态型语言三、程序是如何运行起来的?四、分析五、dir 函数六、def 指令七、pyc文件1.pyc文件三大作用 八、import 指令总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三…

软件工程分析报告05体系结构说明书——基于Paddle的肝脏CT影像分割

基于Paddle的肝脏CT影像分割系统的体系结构说明书 目录 HIPO图 H图 Ipo图 软件结构图 面向数据流的体系结构设计图 程序流程图 S图 用PDL语言描述的伪代码 HIPO图 H图 Ipo图 软件结构图 面向数据流的体系结构设计图 程序流程图 S图 PAD图 用PDL语言描述的伪代码 (1)…

【Hello Go】初识Go语言

初识Go语言 Go语言介绍Go语言是什么Go语言优势Go语言能用来做什么 Go语言环境安装第一个GO语言程序运行Go语言程序 Go语言介绍 Go语言是什么 go语言是是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言. 静态类型:在静态类型…

【计算机网络】UDP协议

UDP的结构 我们学习一个协议最主要的就是理解它的报文格式,对于UDP协议来说 我们看下面的这张图。 16位UDP长度,表示整个数据报(UDP首部UDP数据)的最大长度。UDP报文长度占两个字节,16位表示的数据范围(0-…

Java学习之路 —— Day3(内部类、枚举、泛型、API)

文章目录 1. 内部类2. 枚举3. 泛型 1. 内部类 成员内部类 就是类中的一个普通成员,类似普通的成员方法、成员变量。(套娃) public class Outer {public class Inner {private String name;public static String school;public String getNa…

爆火的迅雷网盘推广,一手云盘app拉新推广渠道必备项目 学习资料

迅雷网盘是目前几个主流网盘拉新推广之一 都可以通过”聚量推客“申请 目前主流的为:夸克网盘拉新、uc网盘推广、迅雷网盘,但是由于阿里的原因 夸克目前不对外开放名额,需要等待,取而代之主流的云盘推广就是迅雷网盘了 聚量推客…

linux基础知识

一、Linux权限详解 Linux的文件权限有以下设定: Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。 Linux下权限的属组有 拥有者 、群组 、其它组 三种。每个文件都可以针对这三个属组(粒度)&#x…

bulldog靶机复现

注:个人笔记,有点简陋,仅供参考。 准备:把kali和靶机设置为同一网段(NAT) 信息搜集 主机扫描 nmap -sP -T4 10.4.7.0/24 扫描出靶机IP为:10.4.7.134 扫描端口、服务 nmap -A -T4 -p- 10.4.…

VRRP(虚拟路由器冗余协议)标准协议工作机制与优势介绍

VRRP标准协议 文章目录 VRRP标准协议简介VRRP标准协议基本概念VRRP标准协议工作机制主备选举主备倒换非抢占模式抢占模式 VRRP标准协议技术优势VRRP典型组网单备份组主备备份多备份组负载分担 推荐阅读 VRRP标准协议简介 VRRP(Virtual Router Redundancy Protocol…

怎么阅读芯片源代码(rtl)

part one 主要的原则。 一个rtl可以是这样的: 经常大家习惯于算法和数据结构。对于设计的部分,落实不一定多。 另外一个rtl也可以是这样的: 所以从不同的层面来讲,一个Rtl有不同的表述。 首先大概把所有的部分浏览一遍&#x…

碳交易机制下考虑需求响应的综合能源系统优化运行(附带Matlab程序)

碳交易机制下考虑需求响应的综合能源系统优化运行(附带Matlab程序) 仿真平台:MATLABCPLEX 使用的是yalmipcplex求解器完成求解 资源地址: 碳交易机制下考虑需求响应的综合能源系统优化运行(附带Matlab程序&#xff09…

CSRF 漏洞实战

CMS创建新用户 方法&#xff1a;攻击者可以利用 XSS 触发 CSRF 攻击。因为&#xff0c;可以利用 JS 发送 HTTP 请求。经过研究受害网站的业务流程&#xff0c;可以构造如下代码&#xff1a; 代码&#xff1a; <script> xmlhttp new XMLHttpRequest(); xmlhttp.open(&qu…

安装DevEco Studio时,遇到的ohpm报错(解决)

如上图所示&#xff0c;我试了网上的各种办法&#xff0c;包括官网的文档&#xff0c;运行init.bat也不行。 接下来我说一下我的办法&#xff1a; 我从官网下载安装包后&#xff0c;将bin文件添加在了环境变量里&#xff08;最终安装的位置&#xff0c;但是因为他会自己下载所…

【运维必看】2023年常见运维面试题汇总,助你拿下offer!

IT运维面试问题总结-基础服务、磁盘管理、虚拟平台&#xff01; 基础服务—— 1、简述Linux中常见的系统服务&#xff0c;其作用分别是&#xff1f; 常见的系统服务及其作用有&#xff1a; ●NTP/Chrony&#xff1a;用于时钟同步&#xff1b; ●DHCP&#xff1a;动态主机配…

MySQL(16):变量、流程控制与游标

变量 在MySQL数据库的存储过程和函数中&#xff0c;可以使用变量来存储查询或计算的中间结果数据&#xff0c;或者输出最终的结果数据。 在 MySQL 数据库中&#xff0c;变量分为 系统变量 以及 用户自定义变量 。 系统变量 变量由系统定义&#xff0c;不是用户定义&#xff…

软件工程分析报告04详细设计说明书——基于Paddle的肝脏CT影像分割

基于Paddle的肝脏CT影像分割系统的详细设计说明书 一、引言 本文档是基于Paddle的肝脏CT影像分割系统的详细设计说明书。本文档旨在对系统的设计、实现以及测试等方面进行详细的阐述&#xff0c;以便于开发人员进行开发和测试工作。 二、概述 肝脏CT影像分割系统是一种医疗影像…

Learning reliable modal weight with transformer for robust RGBT tracking

论文&#xff1a;《Learning reliable modal weight with transformer for robust RGBT tracking》 针对问题&#xff1a;局部线性匹配容易丢失语义信息 解决方法&#xff1a;为了增强特征表示和深化语义特征&#xff0c;分别设计了一种基于改进的Resnet-50的模态权值分配策略…

MATLAB中Filter Designer的使用以及XILINX Coefficient(.coe)File的导出

文章目录 Filter Designer的打开滤波器参数设置生成matlab代码生成XILINX Coefficient(.COE) File实际浮点数的导出官方使用教程 Filter Designer的打开 打开Filter Designer&#xff1a; 方法一&#xff1a;命令行中输入Filter Designer&#xff0c;再回车打开。 方法二&…

漏洞-任意账号注册

一漏洞介绍 1.未验证邮箱/手机号 情景&#xff1a;应用为了方便用户记录用户名&#xff0c;使用邮箱和手机号作为用户名&#xff08;因此很多应用在注册的时候就要求用户填写&#xff0c;多数时候都会给用户发送激活信息&#xff0c;激活后才能登录&#xff09; 缺陷&#xff…

配置DHCP服务器

概述 DHCP(Dynamic Hast Configuration Protocal)就是动态主机配置协议&#xff0c;可以自动配置主机的IP地址、子网掩码、网关及DNS等TCP/IP信息。以DHCP可以有效地降低客户端IP地址配置的复杂度和网络的管理成本。如果路由器能够转发DHCP请求&#xff0c;只需要在一个子网中…