new与malloc的区别和联系

本文探讨了C++中new运算符与C语言的malloc函数在内存分配上的异同,以及为何C++仍然保留这两种分配方式。同时,提出了几个关于内存管理的问题,包括为何有了new/delete还需要malloc/free,以及new/delete如何与malloc/free相比较。
摘要由CSDN通过智能技术生成

两者的相同之处

        1、它们 都可以申请动态内存和释放内存。C++中申请动态内存和释放内存用new/delete或者malloc/free都可以,而且它们的存储方式相同。
        2、 new与malloc动态申请的内存都位于堆中,无法被操作系统自动收回,要有相应的delete或者free来释放空间;对于内置数据类型,如int、char型,其效果是一样的。

两者的区别

1、 类型不同
        malloc/free是C/C++的 标准库函数,在C中需要头文件<stdlib.h>的支持;new/delete是C++的 运算符。对类的对象而言,malloc/free无法满足动态对象的要求,对象在创建的        同时要自动执行构造函数,对象消亡前要自动执行析构函数。

2、 自动计算空间
       new能 自动计算所需的内存空间,而malloc需要 手工计算字节数,然后在返回后强制转换为实际的指针类型。例如,int *p1 = new int[2]; int *p2 = malloc(2 * sizeof(int));。

3、 返回类型
       new成功分配内存 返回具体类型的指针。malloc成功分配内存 返回void类型指针,C/C++规定,void类型可以强制转换为任何其它类型的指针。 void* 表示未确定类型的指针,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据。
extern void *malloc(unsigned int num_bytes); 
   说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针, 分配失败
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值