一文学会c++中的内存管理知识点

article/2025/7/5 13:30:56

文章目录

  • c/c++内存管理
  • c语言动态内存管理
  • c++动态内存管理
    • new/delete自定义类型妙用
    • operator new和operator delete
  • malloc/new,free/delete区别

c/c++内存管理

int globalVar = 1;static int staticGlobalVar = 1;void Test(){static int staticVar = 1;int localVar = 1;int num1[10] = { 1, 2, 3, 4 };char char2[] = "abcd";const char* pChar3 = "abcd";int* ptr1 = (int*)malloc(sizeof(int) * 4);int* ptr2 = (int*)calloc(4, sizeof(int));//开辟4个int空间,并初始化0,int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4);free(ptr1);free(ptr3);}

在这里插入图片描述
1,,又叫堆栈,存储非局部变量/函数参数/返回值,向下生长,
2,,存储动态开辟数据,用于程序运行的内存分配,向上生长,
3,数据段,存储全局变量,静态变量
4,代码段,存储可执行代码/只读常量,

c语言动态内存管理

#include <stdio.h>
#include <stdlib.h>
int main()
{int* p1 = (int*)malloc(sizeof(int) * 5);free(p1);int* p2 = (int*)malloc(sizeof(int) * 5);//分配5个int内存并初始化0,int* p3 = (int*)realloc(p2,sizeof(int) * 10);//将p2扩大到10个内存,也可以缩小,p2 = p3;free(p2);return 0;
}

calloc对开辟的内存直接初始化0,realloc可以扩充或缩小数组

c++动态内存管理

有关C语言的动态内存函数在c++还能用,但用起来麻烦,所以c++提出自己的动态内存管理,
通过new和delete操作符进行动态内存管理

#include <iostream>
using namespace std;
int main()
{int* p1 = new int;int* p2 = new int(10);int* p3 = new int[4];delete p1;delete p2;delete[] p3;return 0;
}

p1正是开辟一个int内存;
p2开辟1个int内存并初始化为10,记住用括号
p3开辟4个int内存,记住用方括号

p1,p2正常删除,p3 delete后面加方括号

申请开辟连续空间和释放,[]匹配使用

new/delete自定义类型妙用

#include <iostream>
using namespace std;
class A {
public:A(int a=0): _a(a){cout << "A():" <<this<< endl;}~A(){cout << "~A():" <<this<< endl;}
private:int _a;
};
int main()
{A* p1 = (A*)malloc(sizeof(A));free(p1);A* p2 = new A(4);delete p2;A* p3 = new A[5];delete[] p3;return 0;
}

A():000001F1BFF08110
~A():000001F1BFF08110
A():000001F1BFF159E8
A():000001F1BFF159EC
A():000001F1BFF159F0
A():000001F1BFF159F4
A():000001F1BFF159F8
~A():000001F1BFF159F8
~A():000001F1BFF159F4
~A():000001F1BFF159F0
~A():000001F1BFF159EC
~A():000001F1BFF159E8

是的,🚩new与delete对自定义类型可以直接调用构造和析构函数
而malloc和free不会

operator new和operator delete

operator new和operator delete是系统提供的全局函数
🚩使用操作符new和delete实际上在底层上调用这两个全局函数来申请和释放空间

实际上operator new也是通过malloc开辟空间,如果成功直接返回,如果空间不足就执行用户的限制条件,若无限定条件直接报错,operator delete也是通过free释放的,同理)

malloc/new,free/delete区别

共同:都能从堆申请空间,并且都要手动释放
🚩1,new和delete是操作符,那两是函数,
🚩2,malloc申请空间不会初始化,new会初始化
3,malloc需要自己计算空间大小并传递,new只需要在后面加类型即可,
4, malloc需要强转,因为自己是void*()类型,new只需加空间类型
🚩5,malloc申请空间失败返回NULL必须判空,new不需要,但需要捕获异常
🚩6,申请自定义对象时,new和delete会调用构造和析构函数,那两不会


http://www.hkcw.cn/article/DWRTdBRMOu.shtml

相关文章

ZC-OFDM雷达通信一体化减小PAPR——直接限幅法

文章目录 前言一、直接限幅法技术1、简介2、原理 二、MATLAB 仿真1、核心代码2、仿真结果 三、资源自取 前言 在 OFDM 雷达通信一体化系统中&#xff0c;信号的传输由多个子载波协同完成&#xff0c;多个载波信号相互叠加形成最终的发射信号。此叠加过程可能导致信号峰值显著高…

【二维数组】

二维数组 需要掌握的知识二维数组与内存二维数组语法Arrays类的常用方法介绍如何实现冒泡排序 需要掌握的知识 二维数组与内存 二维数组语法 //数据类型【】【】数组; //或者 //数据类型 数组名【】【】&#xff1b; //二维数组初始化操作 int [][] scorenew int[][]{{90,85,92…

小黑大语言模型通过设计demo进行应用探索:langchain中chain的简单理解demo

chain简介 LangChain 中的 Chain 模块‌在开发大型语言模型&#xff08;LLM&#xff09;驱动的应用程序中起着至关重要的作用。Chain是串联LLM能力与实际业务的关键桥梁&#xff0c;通过将多个工具和模块按逻辑串联起来&#xff0c;实现复杂任务的多步骤流程编排。 案例 通过…

职坐标精选嵌入式AI物联网开源项目

随着嵌入式、AI与物联网技术的深度融合&#xff0c;开源生态已成为开发者构建智能硬件解决方案的核心驱动力。本文将从嵌入式实时操作系统、多模态AI数据集及物联网接入平台三大维度切入&#xff0c;系统性梳理技术选型要点与实践路径。在嵌入式领域&#xff0c;重点解析低功耗…

闻晓医考---口腔执业医师483分的复习攻略

&#x1f308;分清考试主次 &#x1f386;核心: 口外(114分) 口修(112分) 牙体牙髓(72分) &#x1f386;重点: 口预(50分) 临床医学(49分) 口组病(33分) 口解(33分) 牙周(30分) &#x1f386;次重点: 儿口(16分) 口腔黏膜(16分) 免疫&#xff08;8分&#xff09;…

火语言UI组件--幻灯片

【组件功能】&#xff1a;在有限空间内&#xff0c;循环播放同一类型的图片、文字等内容。 样式预览 基础设置 属性名称属性释义输入值类型初始索引(initialIndex)设置初始状态激活的幻灯片的索引&#xff0c;从 0 开始数字型(Number)触发方式(trigger)设置指示器的触发方式(…

矿用电液控连接器LCFB-12钢丝编织橡胶护套连接器

矿用电液控连接器LCFB-12钢丝编织橡胶护套连接器是煤矿井下综采工作面液压支架电液控制系统中的关键部件,其性能直接关系到整个液压系统的稳定性和安全性。随着智能化采矿技术的快速发展,这类连接器的技术要求和应用场景也在不断升级。本文将从产品结构、技术特点、行业应用及…

基于CAPL的DDS子消息解析- Data

1往期回顾 通过《DDS—RTPS一致性测试案例分析》一文&#xff0c;我们了解到 Data 子消息在 Data Distribution Service(DDS) 通信中扮演着至关重要的角色。它不仅负责 DDS 实体的 Simple Participant Discovery Protocol (SPDP) 发现流程&#xff0c;还参与了 Simple Endpoin…

MySQL之数据库的内嵌函数和联合查询

MySQL之数据库的内嵌函数和联合查询 一.数据库的内嵌函数1.1聚合函数1.2日期函数1.3字符串处理函数1.4 数学函数1.5其他常用的函数 二.联合查询2.1笛卡尔积2.2内连接2.3外连接2.4 自连接2.5子查询2.6合并查询 一.数据库的内嵌函数 1.1聚合函数 在MySQL中有着一类聚合函数来方…

【AUTOSAR OS】内存保护模块技术解析

一、模块总体功能概述 Os_Mprot.c 是AUTOSAR Classic Platform(CP)中内存保护模块的核心实现,主要负责验证任务(Task)和中断服务程序(ISR)对内存区域的访问权限,确保系统资源的合法使用。其核心功能包括: 内存访问权限校验:根据任务/中断所属的应用(App)信任级别(…

Docker 跨平台支持:从 Linux 到 macOS 的容器化开发实践

Docker 容器的理念是“一次构建,处处运行”,旨在解决应用程序在不同环境中部署的兼容性问题。然而,这一承诺的实现,在非原生 Linux 系统(如 macOS 和 Windows)上,需要巧妙的底层机制来支撑。 对于开发者而言,理解 Docker Desktop 在这些操作系统上的工作原理,特别是其…

电机试验平台:现代科技与工程应用的典范

电机试验平台作为电机行业中至关重要的一环&#xff0c;扮演着起着举足轻重的角色。随着科技的进步和工程技术的不断发展&#xff0c;电机试验平台也在不断创新和完善。本文将从电机试验平台的基本概念、发展历程、技术特点以及未来趋势等方面展开介绍。通过深入探讨&#xff0…

[paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型

使用PDX 3.0rc1 训练时序缺陷检测后导出的模型无法转换 Informations (please complete the following information): Inference engine for deployment: PD INFERENCE 3.0-->onnxruntime Why convert to onnx&#xff1a;在端侧设备上部署 Paddle2ONNX Version: 1.3.1 解…

内核进程基础

进程定义 操作系统作为硬件的使用层&#xff0c;提供使用硬件资源的能力&#xff1b;进程作为操作系统的使用层&#xff0c;提供使用操作系统抽象出的资源层的能力。 进程&#xff1a;是指计算机中已运行的程序。进程本身不是基本的运行单位&#xff0c;而是线程的容器。程序…

nic_monitor-全面监控以太网、IB、RoCE网络流量的工具

本文提供三个工具,1. nic_monitor 使用脚本语言 Bash Shell 编写的,用来监控以太网或者RDMA接口流量使用的。 2. nic_monitor_v2.0_eth.py 通过TUI界面实时显示以太网流量的工具,使用Python3编写的。3. nic_monitor_v2.1_rdma.py 通过TUI界面实时显示 IB 和 RoCE 流量的工具…

【论文解读】CVPR2023 PoseFormerV2:3D人体姿态估计(附论文地址)

论文链接&#xff1a;https://arxiv.org/pdf/2303.17472 源码链接&#xff1a;https://github.com/QitaoZhao/PoseFormerV2 Abstract 本文提出了 PoseFormerV2&#xff0c;通过探索频率域来提高 3D 人体姿态估计的效率和鲁棒性。PoseFormerV2 利用离散余弦变换&#xff08;DC…

01流程定位

1.以客户为中心&#xff0c;端到端创造价值 大家要思考一个核心问题&#xff0c;企业用什么为客户创造价值&#xff1f; 流程管理大师-迈克而哈默博士回答&#xff0c;不是产品和服务&#xff0c;而是业务流程&#xff0c;是创造、交付产品和服务背后的各种业务流程&#xff0…

【计算机网络】传输层TCP协议——协议段格式、三次握手四次挥手、超时重传、滑动窗口、流量控制、

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;计算机网络 &#x1f339;往期回顾&#x1f339;&#xff1a; 【计算机网络】传输层UDP协议 &#x1f516;流水不争&#xff0c;争的是滔滔不息 一、TCP协议 UDP&…

AI炼丹日志-24 - MCP 自动操作 提高模型上下文能力 Cursor + Sequential Thinking Server Memory

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇&#xff1a; MyBatis 更新完毕目前开始更新 Spring&#xff0c;一起深入浅出&#xff01; 大数据篇 300&#xff1a; Hadoop&…

yolov8改进模型

YOLOv8 作为当前 YOLO 系列的最新版本&#xff0c;已经具备出色的性能。若要进一步改进&#xff0c;可以从网络架构优化、训练策略增强、多任务扩展和部署效率提升四个方向入手。以下是具体改进思路和实现示例&#xff1a; 1. 网络架构优化 (1) 骨干网络增强 引入 Transform…