一、显而易见的区别

1、属性

new/delete是C++关键字,需要编译器支持;
malloc/free是库函数,需要头文件支持。

2、参数

使用new操作符申请内存分配时,无须指定内存块的大小,编译器会根据类型信息自行计算;
而使用malloc函数申请内存分配时,则需要显式地指出所需内存的尺寸。

3、返回类型

使用new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符;
而使用malloc函数内存分配成功时,则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。

4、分配失败

使用new操作符内存分配失败时,会抛出bac_alloc异常;
而使用malloc函数内存分配失败时,返回NULL。

5、 自定义类型

new会先调用operator new函数,申请足够的内存(通常底层使用malloc实现)。然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针。delete先调用析构函数,然后调用operator delete函数释放内存(通常底层使用free实现)。

malloc/free是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象构造和析构工作。

6、 重载

C++允许重载new/delete操作符,特别的,布局new的就不需要为对象分配内存,而是指定了一个地址作为内存起始区域,new在这段内存上为对象调用构造函数完成初始化工作,并返回此地址。
而malloc不允许重载。

二、内存空间

1、区别

new操作符从自由存储区(free store)上为对象动态分配内存空间;
而malloc函数从堆上动态分配内存。

2、堆

堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。

3、自由存储区

自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。

基本上,所有的C++编译器默认使用堆来实现自由存储,也即是缺省的全局运算符new和delete也许会按照malloc和free的方式来被实现,这时由new运算符分配的对象,说它在堆上也对,说它在自由存储区上也正确。但程序员也可以通过重载操作符,改用其他内存来实现自由存储,例如全局变量做的对象池,这时自由存储区就区别于堆了

【C++】new和malloc的区别相关推荐

  1. HeapAlloc与malloc的区别

    malloc是在CRT的内存堆上分配的,这个堆的存在一般来说你是不会关心的 HeapAlloc则不同,你需要给它指定你想从哪个堆上分配,而这个堆是从HeapCreate创建出来的 HeapAlloc大 ...

  2. C++ new和malloc的区别

    这里先对new和delete简单进行一下总结,然后再细说new和malloc的区别. 一.new和delete C语言提供了malloc和free两个系统函数,完成对堆内存的申请和释放.而C++则提供 ...

  3. C++ | 动态分配内存 new和malloc的区别

    01 静态分配内存 通常声明变量都采用"静态分配"的方式,也就是所有变量声明必须在编译阶段完成. 02 动态分配内存--new和delete 动态分配内存是指程序在运行时才提出分配 ...

  4. 面试中常被问到(六)new/delete和malloc/free区别

    new/delete和malloc/free区别 (1)二者都是用来实现动态内存管理,内存空间的开辟(new,malloc)以及内存空间的释放(delete,free) (2)malloc/free是 ...

  5. C++中的new和malloc的区别

    区别如下: new会先调用malloc分配内存,并调用类的构造函数创建对象 malloc只是分配内存,不调用类的构造函数创建对象 delete会执行类的析构函数销毁对象,然后调用free释放内存空间 ...

  6. kmalloc、vmalloc、malloc的区别

    简单的说: kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存 kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续,malloc ...

  7. new与malloc的区别以及实现方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/shanghairuoxiao/article/details/70337890 new和malloc ...

  8. new运算符与malloc函数区别

    相同点: 都可以进行内存管理. 不同点: 1.new 是c++中的操作符,malloc是c 中的一个函数 2.new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而ma ...

  9. C++(1)new和malloc的区别和联系

    最近着手学习c++,对着书一边读一遍写代码.遇到了一些疑问,记录一下. 当我在读到new这个关键字的使用的时候,作者写道:有heap分配出这个类型的对象,将地址返回去. 读到这,我会想起当初学过的c语 ...

最新文章

  1. 【目标检测】Fast RCNN算法详解
  2. 体质测试数据统计软件,[体质测试数据excel自动统计表]体质测试数据Excel自动统计模板的研制...
  3. MySQL到MsSQL的迁移工具——SSMA
  4. 算法面试题(python)——如何找出数组中出现一次的数
  5. C语言中浮点数在内存中的存储方式
  6. ArcGIS图解建模工具与DEM提取山脊、山谷线(水文分析、表面分析)
  7. 那位有epson R1900中文清零软件?
  8. VB6.0视频教程78集,入门视频教程,基础够了(基础篇)
  9. excel无法加密保存在HTML,如何excel加密后另存为后无需再输入密码/excel加密文件怎么解密?...
  10. git 推送出现 “fatal: The remote end hung up unexpectedly“ 解决方案
  11. 七十三、java版商城之买家端商品详情Spring Cloud+SpringBoot+mybatis+uniapp b2b2c o2o 多商家入驻商城 直播带货商城 电子商务
  12. python斜杠作用_Python中正反斜杠(‘/’和‘\’)的意义与用法
  13. [软件安装] Apache Httpd 安装教程
  14. 分享RTFM和STFW的意思
  15. 数据库——完整性约束条件
  16. H3C   VALN-MSTP-VRRP实验日记
  17. Python数据收集入门
  18. 手机app在线机房温湿度超高超低报警
  19. 哔哩哔哩 B站视频引用到自己的网站的方法
  20. 禁用word 2007里面的信息检索功能

热门文章

  1. Modus串行链路系统电气特性:2线-Modus、4线-Modus、RS232-Modus和RS485-Modus的特性
  2. 计算机视觉:Bag of words算法实现图像识别与搜索
  3. linux查看流量开源,Linux流量监控工具 - iftop
  4. 【只需简单三个步骤】ACE系统前后端不分离情况下如何增加一个JSP嵌入页面
  5. Unity完全学习教程-从初学者到C#中的RPG游戏开发
  6. 读书:历史 -- 空王冠
  7. 在 Ubuntu Natty 中解除系统托盘限制
  8. [转]Java中常用的集合—初学者的你不可错过的精编整理
  9. Dubbo 2.7.1 踩坑记
  10. zabbix4.0搭建(基于CentOS6.8)