文章目录

  • 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.pswp.cn/diannao/85616.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/85616.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/85616.shtml

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

相关文章

深入解析Linux死锁:原理、原因及解决方案

Linux死锁是系统资源管理的致命陷阱&#xff0c;平均每年导致全球数据中心约​​3.7亿小时​​的服务中断。本文深度剖析死锁形成的​​四个必要条件​​和六种典型死锁场景&#xff0c;结合Linux内核源码层级的资源管理机制&#xff0c;揭示文件系统锁、内存分配、多线程同步等…

SKUA-GOCAD入门教程-第八节 线的创建与编辑2

8.1.3根据线创建曲线 (1)从线生成线 这个命令可以将一组曲线合并为一条曲线。每个输入曲线都会成为新曲线内的一个部分。 1、选择 Curve commands > New > Curves 打开对话框。 图1 根据曲线创建曲线 在“name”框中

『uniapp』把接口的内容下载为txt本地保存 / 读取本地保存的txt文件内容(详细图文注释)

目录 预览效果思路分析downloadTxt 方法readTxt 方法 完整代码总结 欢迎关注 『uniapp』 专栏&#xff0c;持续更新中 欢迎关注 『uniapp』 专栏&#xff0c;持续更新中 预览效果 思路分析 downloadTxt 方法 该方法主要完成两个任务&#xff1a; 下载 txt 文件&#xff1a;通…

攻防世界-unseping

进入环境 在获得的场景中发现PHP代码并进行分析 编写PHP编码 得到 Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozOiJwd2QiO319 将其传入 想执行ls&#xff0c;但是发现被过滤掉了 使用环境变量进行绕过 $a new…

IP查询与网络风险的关系

网络风险场景与IP查询的关联 网络攻击、恶意行为、数据泄露等风险事件频发&#xff0c;而IP地址作为网络设备的唯一标识&#xff0c;承载着关键线索。例如&#xff0c;在DDoS恶意行为中&#xff0c;攻击者利用大量IP地址发起流量洪泛&#xff1b;恶意行为通过变换IP地址绕过封…

pikachu通关教程-XSS

XSS XSS漏洞原理 XSS被称为跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;&#xff0c;由于和层叠样式表&#xff08;Cascading Style Sheets&#xff0c;CSS&#xff09;重名&#xff0c;改为XSS。主要基于JavaScript语言进行恶意攻击&#xff0c;因为js非常灵活…

【时时三省】(C语言基础)数组作为函数参数

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 调用有参函数时&#xff0c;需要提供实参。例如sin ( x )&#xff0c;sqrt ( 2&#xff0c;0 )&#xff0c;max ( a&#xff0c;b )等。实参可以是常量、变量或表达式。数组元素的作用与变量…

硬件工程师笔记——555定时器应用Multisim电路仿真实验汇总

目录 一 555定时器基础知识 二、引脚功能 三、工作模式 1. 单稳态模式&#xff1a; 2. 双稳态模式&#xff08;需要外部电路辅助&#xff09;&#xff1a; 3. 无稳态模式&#xff08;多谐振荡器&#xff09;&#xff1a; 4. 可控脉冲宽度调制&#xff08;PWM&#xff09…

C++11特性:enum class(强枚举类型)详解

C11引入的 enum class&#xff08;强枚举类型&#xff09;解决了传统枚举的多个问题&#xff1a; 防止枚举值泄漏到外部作用域&#xff1b;禁止不同枚举间的隐式转换&#xff1b;允许指定底层数据类型优化内存&#xff1b;避免命名空间污染。 其基本语法为 enum class Name{.…

【QT】QString 与QString区别

在C中&#xff0c;QString 和 QString& 有本质区别&#xff0c;尤其是在参数传递和内存管理方面&#xff1a; 1. QString&#xff08;按值传递&#xff09; 创建副本&#xff1a;传递时会创建完整的字符串副本内存开销&#xff1a;可能涉及深拷贝&#xff08;特别是大字符…

提升四级阅读速度方法

以下是针对四级英语阅读速度提升的系统性解决方案&#xff0c;结合最新考试规律和高效训练方法&#xff0c;分五个核心模块整理&#xff1a; &#x1f680; ​​一、基础提速训练&#xff08;消除生理障碍&#xff09;​​ ​​扩大视幅范围​​ 从逐词阅读升级为 ​​意群阅读…

6.4 note

构造矩阵 class Solution { private: vector<int> empty {}; // 返回每个数字(-1)所在的序号&#xff0c;可以是行或列, 如果为空则无效 vector<int> topoSort(int k, vector<vector<int>>& conditions) { // 构建一个图…

SCSS 全面深度解析

一、SCSS 入门指南&#xff1a;为你的 CSS 工作流注入超能力 在现代 Web 开发中&#xff0c;样式表的复杂性和维护成本日益增加。为了应对这一挑战&#xff0c;CSS 预处理器应运而生&#xff0c;而 SCSS (Sassy CSS) 正是其中最流行、最强大的工具之一。本指南将带你深入了解 …

R1-Searcher++新突破!强化学习如何赋能大模型动态知识获取?

R1-Searcher新突破&#xff01;强化学习如何赋能大模型动态知识获取&#xff1f; 大语言模型&#xff08;LLM&#xff09;虽强大却易因静态知识产生幻觉&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术成破局关键。本文将解读R1-Searcher框架&#xff0c;看其如何通…

图神经网络原理及应用简介

图神经网络&#xff08;Graph Neural Networks, GNNs&#xff09;原理及应用 1. 图神经网络的基本概念 图神经网络是一种专门用于处理图结构数据的深度学习模型。图&#xff08;Graph&#xff09;由节点&#xff08;Node&#xff09;和边&#xff08;Edge&#xff09;组成&…

Unity 限制物体在Bounds 包围盒控制移动

我列举两种方式&#xff0c;其实最终都是涉及到包围盒使用问题。可以通过 Box Collider 的 bounds 属性来获取物体的包围盒&#xff08;Bounds&#xff09;也可以直接设置Bounds包围盒使用&#xff0c;从而限制其移动范围。不过需要注意&#xff0c;直接使用 Box Collider 的 s…

SpringBoot中缓存@Cacheable出错

SpringBoot中使用Cacheable: 错误代码&#xff1a; Cacheable(value "FrontAdvertiseVOList", keyGenerator "cacheKey") Override public List<FrontAdvertiseVO> getFrontAdvertiseVOList(Integer count) {return this.list(Wrappers.<Adve…

位集合(STL bitset)简介

【bitset 官方网址】 https://cplusplus.com/reference/bitset/bitset/ 位集合&#xff08;Bit Set&#xff09;是一种高效存储和操作布尔值&#xff08;true/false&#xff09;或二进制位&#xff08;0/1&#xff09;的数据结构&#xff0c;主要用于处理大规模整数集合或状态标…

基于SDN环境下的DDoS异常攻击的检测与缓解

参考以下两篇博客&#xff0c;最后成功&#xff1a; 基于SDN的DDoS攻击检测和防御方法_基于sdn的ddos攻击检测与防御-CSDN博客 利用mininet模拟SDN架构并进行DDoS攻击与防御模拟&#xff08;Ryumininetsflowpostman&#xff09;_mininet模拟dos攻击-CSDN博客 需求 H2 模拟f…

责任链模式:构建灵活可扩展的请求处理体系(Java 实现详解)

一、责任链模式核心概念解析 &#xff08;一&#xff09;模式定义与本质 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;其核心思想是将多个处理者对象连成一条链&#xff0c;并沿着这条链传递请求&#xff0c;直到有某…