C++学习笔记_11_动态内存管理(对比malloc、new,free、delete)

本文对比了C++中new/delete与C语言中malloc/free的区别,详细解析了它们在内存分配、构造函数调用等方面的不同,并介绍了operator new的使用场景。

C++学习笔记_11_动态内存管理(对比malloc、new,free、delete)


内存空间分配

例题:如何一次在堆上申请4G内存?答:只能更换64位的进程。

以X32的进程为例,C/C++中程序内存区域划分如下:

在这里插入图片描述
32位进程空间=4G=4×1024 M=4×1024×1024 kb=4×1024×1024×1024 Byte

其中:

  • 栈:非静态局部变量、返回值、函数参数
  • 内存映射段:
  • 堆:用于程序运行时动态内存分配,向上增长。malloc、new等都在堆上
  • 数据段:存储全局数据和静态数据
  • 代码段:可执行的代码、只读常量

new/delete

一、引出

C语言已经有了malloc/free等接口函数去堆上申请释放空间?C++为什么还需要new/delete?
针对内置类型,使用malloch和new申请空间效果一样在这里插入图片描述

在这里插入图片描述
但针对自定义类型:

  • malloc和free只管开空间+释放空间
  • new和delete开空间+构造函数初始化+析构函数+释放空间

二、面试经典:

new/delete对比malloc/free最重要的区别?
1.用法区别

  • new/delete是操作符,malloc/free是函数
  • new/delete不需要强转,malloc/free需要强转
  • new/delete传的参数是类型长度,malloc/free参数是分配的内存的字节数

2.是否调用构造函数、析构函数

  • new/delete调用,malloc/free不用

三、常见错误

  • 忘记检查所请求的内存是否分配成功。
  • 操作内存时超出了分配内存的边界。

四、operator new

operator new就是函数名,不是new/delete重载
用法与malloc/free相同

operator new 和 malloc 区别

  • C语言处理错误的方式一般是返回错误码,所以malloc失败返回0
  • C++处理错误失败的方式一般抛出异常,所以operator new 和 new 失败抛异常。

部分习题及答案:

  1. 变量所在哪个内存区域以及变量所占空间大小是多少?
  2. C++中关于堆和栈的说法,哪个是错误的:( )
  3. 下面有关c++内存分配堆栈说法错误的是( )
  4. 设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为? ( )
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明教张公子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值