C/C++内存管理(new、delete)

内存的划分

进程虚拟物理空间
在这里插入图片描述

代码段的代码不是我们编写的代码,是转化成二进制的代码

在这里插入图片描述
在这里插入图片描述

常量区:存储常量,不能被修改的。也存储代码

new/delete

1、new一个int对象

int* p1 = new int;

2、new是个int对象

int* p2 = new int[10];

new一个对象,初始化成10

int* p3 = new int(10);

在这里插入图片描述
3、new多个对象并初始化(C++11才支持)

int* p4 = new[10]{10,10,10,10};

前面给值的初始化,没给的默认初始化为0
在这里插入图片描述

4、delete

在这里插入图片描述

不匹配,可能会崩溃

对于内置类型,malloc和new除了用法不同,没有什么区别
对于自定义类型:malloc之开空间;new除了开空间还会去调用自定义类型的构造函数
C的写法
在这里插入图片描述
C++的写法,new不仅开空间,还去调用自定义类型的构造函数
在这里插入图片描述

当写链表时,节点会经常使用next、_val,类就比较喜欢用struct定义,因为struct默认是公有,不用访问限定符
在这里插入图片描述

new delete具体干了什么

C语言
在这里插入图片描述
在这里插入图片描述

C++
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

malloc失败返回空指针;new失败是抛异常

operator new和operator delete函数

operator new、operator delete是两个库函数,不是运算符重载
1、operator new:封装了malloc,当malloc失败的时候抛异常
在这里插入图片描述
2、operator delete:封装的free
在这里插入图片描述

这里是引用
(1)operator new和malloc没有本质的区别,operator new就是对malloc进行了封装,当malloc失败时抛异常
(2)operator delete与free也没有本质的区别
(3)operator new 和 operator delete没有什么特殊的意义,只是在new、delete的底层上
new的底层就是开辟空间、调用构造函数。(开辟空间这如果用malloc,那么失败还是返回空指针,为了不返回空指针,写了一个库函数operator new 当失败的时候抛异常)
在这里插入图片描述
在这里插入图片描述

定位new

在这里插入图片描述

在这里插入图片描述

内存泄漏

内存泄漏是指针丢了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值