当前位置: 首页 > news >正文

浅述C++内存管理——new与malloc的不同

前言

C++相对于其他语言有一个重要的特点就是对于内存的管理,相比于C语言,C++提供了新的关键字new来代替malloc的功能,其中有何不同,请看下文。

一、内存的构成

在我们日常编程过程中最常接触到的就是以下四个分区

在这里插入图片描述

以下将分别给出例子说明每个分区对应存储的内容。

#include <iostream>
using namespace std;int global;
static int stc_global;void func(){int func_val;static int stc_func_val;
}int main(){func();int val;static int val;char arr[] = "abc";char* cptr = "abc";int*ptr = new int;return 0;
}

分析:

**global: **作为全局变量,存放于数据段;

**stc_global: **全局变量,且为静态变量,存放于数据段;

**func_val: **由函数调用产生的临时变量,存放于栈;

**stc_func_val: **临时变量,但是由 static 修饰,因此存放于数据段;

**val: **主函数中创建的临时变量,存放于栈;

**stc_val: **临时变量,但由static修饰,因此存放于数据段;

**arr: **主函数中直接创建的数组,存放于栈;

***arr: **对数组解引用,得到数组第一个元素的首地址,虽然 ”abc“ 是一个常量字符串,但是在此处是将其常量值拷贝到了栈,因此本质还是栈区;

**cptr: **主函数中创建的指针变量,存放于栈区;

***cptr: **与 *arr 不同之处在于,cptr是一个指针变量,直接指向了常量字符串 ”abc" , 而常量字符串作为只读常量,存放于代码段,因此 *cptr 存放于代码段;

**ptr: ** 主函数中创建的指针变量,存放于栈区;

***ptr: **new关键字其功效类似于 C语言中的 malloc 函数,因此 *ptr指向的内容属于堆区;

其中最容易混淆的就是指针变量,许多同学看到 new、malloc 等字就盲目认为存放于堆区,但是关键在于是其中开辟的空间属于堆区,而存放该空间地址的指针变量还是属于栈区

二、C语言和 C++对于内存管理的函数

万物的诞生必有其道理。C语言的内存管理函数为 malloc 和 free,为什么到了 C++就不在适用,反而诞生了 new 和 delete 关键字。其关键在于 C++ 多出的面向对象的概念,下面将从其不同讲述其区别。

2.1 类型不同

在 C语言中,malloc 和 free 作为函数使用,因此在使用时就必须包含对应的头文件;

在 C++ 中,new 和 delete 则作为关键字使用,因此不需要包含头文件即可使用;

2.2 功能不同

前面提到 C++ 之所以诞生出 new 关键字很大一部原因在于面向对象概念的提出。

new 相比于 malloc 最大的提升也在于 new 会调用所创建类型的构造函数,这一点在平时创建 int,char等内置类型时体现的不明显,但是对于一个自写的类,就显得尤为重要。同样的,delete 则会调用类的析构函数,这使得面向对象得以更好的实现。

2.3 失败后返回值不同

这一点在前期不用过多了解,我们只需要知道 C语言在调用 malloc 函数分配空间失败时,会返会一个空的指针,但是在 C++ 中 new 分配空间失败时,则会抛出一个异常,可以用 try—catch 捕获。

相关文章:

浅述C++内存管理——new与malloc的不同

前言 C相对于其他语言有一个重要的特点就是对于内存的管理&#xff0c;相比于C语言&#xff0c;C提供了新的关键字new来代替malloc的功能&#xff0c;其中有何不同&#xff0c;请看下文。 一、内存的构成 在我们日常编程过程中最常接触到的就是以下四个分区 以下将分别给出例…...

语言基础篇11——函数、函数参数类型、装饰器、生成器

函数 基本结构 def func_name(value):print(f"Hello {value}")return 0func_name("World")函数参数 参数默认值和五种参数类型 https://docs.python.org/3/glossary.html#term-parameter 参数默认值 带默认值的参数必须在参数列表右边 def func_nam…...

linux jar包class热部署 工具 arthas安装及使用

在不改变类、方法 的前提下&#xff0c;在方法中对业务逻辑做处理 或 打日志等情况下使用。 建议线上日志调试时使用&#xff1a; arthas安装 1. 下载文件 arthas-packaging-3.7.1-bin.zip https://arthas.aliyun.com 2. 服务器安装arthas 2.1 服务器指定目录下创建目录 c…...

Android studio 调整jar包顺序

第一步&#xff1a;编译jar包&#xff0c;放入lib路径下&#xff1a;如&#xff1a; 第二步&#xff1a;app 目录下build.gradle 中添加 compileOnly files(libs/classes.jar) 第三步&#xff1a;project目录下build.gradle 中添加 allprojects {gradle.projectsEvaluated {t…...

用Qt写的机器视觉绘图工具

一个用QtGraphicsView写的机器视觉绘图工具&#xff0c;支持直线查找&#xff0c;圆拟合&#xff0c;卡尺工具&#xff0c;圆环查找等。底部GraphicsScene可以实时显示相机图像&#xff0c;工具获取图像后通过算法处理图像。 Project是基于Qt的例程项目qdraw改的。...

Spring Boot 打包,将依赖全部打进去

一、背景 spring boot 2.4.4 项目&#xff0c;打包&#xff0c;将依赖全部打进去 二、在pom.xml中引入插件 在项目的 pom.xml 文件中&#xff0c;添加 Maven 插件 spring-boot-maven-plugin&#xff0c;示例如下&#xff1a; <build><plugins><!-- ...其他插件…...

SpringCloud入门实战(十五)分布式事务框架Seata简介

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…...

MySQL数据库 主从复制与读写分离

读写分离是什么 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作&#xff08;INSERT、UPDATE、DELETE&#xff09;&#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 为什么要进行读写分离 因…...

Qt day2

目录 1.多态&#xff0c;虚函数&#xff0c;纯虚函数 1.多态性&#xff08;Polymorphism&#xff09;&#xff1a; 2.虚函数&#xff08;Virtual Function&#xff09;&#xff1a; 3.纯虚函数&#xff08;Pure Virtual Function&#xff09;&#xff1a; 将引用作为函数参…...

JavaScript - 好玩的打字动画

效果预览&#xff1a; &#x1f680;HTML版本 <!DOCTYPE html> <html> <head><title>打字动画示例</title><style>.typewriter {color: #000;overflow: hidden; /* 隐藏溢出的文本 */white-space: nowrap; /* 不换行 */border-right: .…...

rpm打包

文章目录 rpm打包 1. rpm打包步骤0&#xff09;准备工作&#xff1a;安装打包工具rpm-build和rpmdevtools&#xff08;1&#xff09;在线安装&#xff08;2&#xff09;离线安装 1&#xff09;创建初始化目录2&#xff09;准备打包内容3&#xff09;编写打包脚本 spec文件4&…...

匠心新品:大彩科技超薄7寸WIFI线控器发布,热泵、温控器、智能家电首选!

一、产品介绍 此次发布一款7寸高清全新外壳产品&#xff0c;让HMI人机界面家族再添一新成员。该产品相比其他外壳有以下5个大改动&#xff1a; 1 表面玻璃盖板使用2.5D立体结构&#xff1b; 2 液晶盖板采用一体黑设计&#xff0c;且液晶屏与触摸板是全贴合结构&#xff1b; …...

华为云云服务器评测|使用云耀云服务器L实例部署Portainer工具

华为云云服务器评测&#xff5c;使用云耀云服务器L实例部署Portainer工具 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点1.3 云耀云服务器L实例使用场景 二、本次实践介绍2.1 本次实践简介2.2 Portainer简介 三、购买云耀云服务器L实例3.1 登录…...

C++并发编程:构建线程安全队列(第一部分:粗粒度锁)

C并发编程&#xff1a;构建线程安全队列&#xff08;第一部分&#xff1a;粗粒度锁&#xff09; 引言 在多线程编程中&#xff0c;线程之间的数据共享和通信是一个非常重要的问题。在这篇博客中&#xff0c;我们将讨论如何用C实现一个基础但非常实用的线程安全队列。这个队列…...

C++设计模式-更新中

单例模式 这个类实现了单例模式。单例模式是一种设计模式&#xff0c;旨在确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。 在 ConnectionManager 类中&#xff0c;它通过以下方式实现了单例模式&#xff1a; 构造函数 ConnectionManager() 被声明为…...

Hydra工具的使用

目录 Hydra初识 Hydra使用 hydra破解mysql 前言 不固定用户名密码爆破 hydra破解ssh 以用户名为密码登录 hydra破解rdp 将爆破密码的结果输出到文件中 Hydra初识 前言&#xff1a; hydra是一款开源的暴力破解工具&#xff0c;支持多种服务破解原理&#xff1a;使用户…...

Pytorch学习:卷积神经网络—nn.Conv2d、nn.MaxPool2d、nn.ReLU、nn.Linear和nn.Dropout

文章目录 1. torch.nn.Conv2d2. torch.nn.MaxPool2d3. torch.nn.ReLU4. torch.nn.Linear5. torch.nn.Dropout 卷积神经网络详解&#xff1a;csdn链接 其中包括对卷积操作中卷积核的计算、填充、步幅以及最大值池化的操作。 1. torch.nn.Conv2d 对由多个输入平面组成的输入信号…...

水果库存系统(SSM+Thymeleaf版)

不为失败找理由&#xff0c;只为成功找方法。所有的不甘&#xff0c;因为还心存梦想&#xff0c;所以在你放弃之前&#xff0c;好好拼一把&#xff0c;只怕心老&#xff0c;不怕路长。 文章目录 一、前言二、系统架构与需求分析1、技术栈1.1 后端1.2 前端 2、需求分析 三、设计…...

如何在VueJS应用程序中设置Toast通知

通知是开发者提升应用程序互动性和改善用户体验的强大工具。通过利用通知&#xff0c;开发者可以在用户与应用程序互动的同时&#xff0c;有效地向用户传达重要事件。 通知在应用程序中起着至关重要的作用&#xff0c;可以及时通知用户有关各种操作和事件的信息。它们可以用于通…...

css让元素保持等比例宽高

使用新属性 aspect-ratio: 16/9; 代码示例 <style>div {width: 60%;/* 等比例宽高 */aspect-ratio: 16/9;background-color: red;margin: auto;}</style> </head><body><div></div> </body>示例 aspect-ratio兼容性...

终极指南:VSCode Rainbow Fart如何通过Vue.js打造沉浸式编程体验

终极指南&#xff1a;VSCode Rainbow Fart如何通过Vue.js打造沉浸式编程体验 【免费下载链接】vscode-rainbow-fart 一个在你编程时疯狂称赞你的 VSCode 扩展插件 | An VSCode extension that keeps giving you compliment while you are coding, it will checks the keywords …...

WSL2下git clone失败:防火墙与代理配置全解析

1. WSL2下git clone失败的常见现象 最近在WSL2环境下工作时&#xff0c;突然发现git clone命令无法正常拉取远程仓库代码。这个问题困扰了我好几天&#xff0c;经过反复排查才发现是Windows防火墙设置和代理配置的问题。相信很多使用WSL2开发的同行都遇到过类似情况&#xff1…...

RSA1 - Writeup by AI

RSA1 - Writeup by AI 1. 题目描述项目内容题目来源Bugku题目类型Crypto (密码学)考点RSA 大数分解、私钥计算题目信息 题目给出了 RSA 加密的三个参数&#xff1a; e 65537 N 1018261336751023520497560395829454421245429586704872293236600679847605951423419167478189648…...

无人机海上搜救数据集 海上搜救人员识别 违规游泳识别 无人艇自主导航数据集 海洋安全监控及水上救援预警等场景 深度学习yolo格式地10625期

海洋目标检测数据集 README 项目概述 本数据集聚焦于海洋场景下的目标识别与安全监测任务&#xff0c;为海上搜救、智能无人艇导航及海洋环境监控等领域提供高质量标注数据&#xff0c;助力海洋视觉感知技术的落地应用。核心数据信息维度内容数据类别共5类&#xff1a;船只、浮…...

springboot+vue基于web的针对老年人的景区订票系统的设计与实现

目录系统功能模块划分关键技术实现特殊考量因素项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统功能模块划分 用户端功能&#xff08;老年人友好设计&#xff09; 注册登录&#xff1a;支持手机号验证、子女代注册、大字体…...

Emotion2Vec+语音情感识别系统:5分钟快速部署,9种情绪一键分析

Emotion2Vec语音情感识别系统&#xff1a;5分钟快速部署&#xff0c;9种情绪一键分析 1. 系统介绍与核心价值 1.1 什么是Emotion2Vec Emotion2Vec是一款基于深度学习的语音情感识别系统&#xff0c;能够自动分析语音中蕴含的情绪状态。这个由科哥二次开发构建的镜像版本&…...

Agent-S:重新定义人机协作的智能体框架技术解析

Agent-S&#xff1a;重新定义人机协作的智能体框架技术解析 【免费下载链接】Agent-S Agent S: an open agentic framework that uses computers like a human 项目地址: https://gitcode.com/GitHub_Trending/ag/Agent-S 在数字化转型加速的今天&#xff0c;人机协作的…...

零基础玩转BEYOND REALITY Z-Image:手把手教你搭建高精度文生图引擎

零基础玩转BEYOND REALITY Z-Image&#xff1a;手把手教你搭建高精度文生图引擎 1. 引言&#xff1a;为什么选择BEYOND REALITY Z-Image 在当今AI图像生成领域&#xff0c;BEYOND REALITY Z-Image以其卓越的写实表现力脱颖而出。这款基于Z-Image-Turbo底座和BEYOND REALITY S…...

OpenClaw夜间任务优化:Qwen3-32B+RTX4090D镜像低负载模式配置

OpenClaw夜间任务优化&#xff1a;Qwen3-32BRTX4090D镜像低负载模式配置 1. 问题背景与优化动机 去年12月&#xff0c;我开始用OpenClawQwen3-32B模型搭建个人自动化工作流。最初配置的定时备份任务每晚11点准时运行&#xff0c;但很快发现两个问题&#xff1a; 电费异常&am…...

【全场景优化】WaveTools鸣潮性能调校指南:从卡顿到流畅的完整解决方案

【全场景优化】WaveTools鸣潮性能调校指南&#xff1a;从卡顿到流畅的完整解决方案 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 问题定位&#xff1a;硬件与软件的兼容性挑战 当代游戏性能优化面临的核…...