malloc和new有什么区别

简介:

malloc和new有以下不同:

  • new、delete是操作符,可以重载,只能在c++中使用。
  • malloc、free是函数,可以覆盖,c、c++中都可以使用。
  • new可以调用对象的构造函数,对应的delete调用相应的析构函数。
  • malloc仅仅负责分配内存,free仅仅回收内存,并不执行构造和析构函数。
  • new、delete返回的是某种数据类型指针,malloc、free返回的是void指针。

注意:malloc申请的内存空间要用free释放,而new申请的内存空间要用delete释放,不要混用。因为两者实现的机理不同。

 

有了malloc/free为什么还要new/delete?
malloc/free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存
对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构 函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。 对于内部数据类型的“对象”没有构造与析构过程,对它们而言,malloc/free和new/delete是等价的。为什么C++不把malloc /free淘汰出局呢?这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。





本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/archive/2012/12/11/2813796.html,如需转载请自行联系原作者

目录
相关文章
|
3月前
|
C语言
C语言malloc与free实现原理
malloc()的实现很简单。它首先会扫描之前由 free()所释放的空闲内存块列表,以求找到尺寸大于或等于要求的一块空闲内存。(取决于具体实现,采用的扫描策略会有所不同。例如,first-fit 或 best-fito。)如果这一内存块的尺寸正好与要求相当,就把它直接返回给调用者。如果是一块较大的内存,那么将对其进行分割,在将一块大小相当的内存返回给调用者的同时,把较小的那块空闲内存块保留在空闲列表中。 如果在空闲内存列表中根本找不到足够大的空闲内存块,那么 malloc()会调用 sbrk()以分配更多
17 0
C语言malloc与free实现原理
|
5月前
|
存储 Cloud Native Linux
malloc、free 和 new、delete 的区别
malloc、free 和 new、delete 的区别
|
6月前
|
编译器 程序员 测试技术
详解动态内存管理【malloc/calloc/realloc/free函数/柔性数组】【C语言/进阶/数据结构基础】
详解动态内存管理【malloc/calloc/realloc/free函数/柔性数组】【C语言/进阶/数据结构基础】
173 0
|
4月前
|
程序员 编译器 C语言
C语言动态内存管理函数(malloc、free、calloc、realloc)
开辟内存空间的⽅式有两个缺点: • 空间开辟⼤⼩固定 • 数组声明时,必须指定数组的⻓度,长度⼀旦确定了便不能调整 而实际情况是,很多时候我们所需要的空间⼤⼩只有在程序运⾏后才能知道,为此C语⾔引⼊了动态内存开辟这个概念,让程序员⾃⼰可以申请和释放内存空间,这样就显得比较灵活了。
|
6月前
|
编译器 程序员 C语言
【C语言】动态内存管理(malloc,free,calloc,realloc,柔性数组)
【C语言】动态内存管理(malloc,free,calloc,realloc,柔性数组)
|
1天前
|
程序员 编译器 C语言
C语言知识:动态内存管理(malloc free calloc realloc)
C语言知识:动态内存管理(malloc free calloc realloc)
|
1月前
|
存储 程序员 Shell
【C/C++ 内存管理函数】C语言动态内存管理大揭秘:malloc、calloc、realloc与new的对比与差异
【C/C++ 内存管理函数】C语言动态内存管理大揭秘:malloc、calloc、realloc与new的对比与差异
175 0
|
3月前
|
C语言
C语言——动态内存管理(malloc, calloc, realloc, free, 柔性数组详解)
C语言——动态内存管理(malloc, calloc, realloc, free, 柔性数组详解)
|
3月前
|
C语言 程序员
【C语言基础教程】内存的申请和释放(malloc、free、realloc、calloc)
【C语言基础教程】内存的申请和释放(malloc、free、realloc、calloc)
412 0
【C语言基础教程】内存的申请和释放(malloc、free、realloc、calloc)
|
4月前
|
监控 Java Unix
日常知识点之内存泄露定位手段(c语言hook malloc相关方式)
日常知识点之内存泄露定位手段(c语言hook malloc相关方式)
40 0