招聘计算机程序员时最常见的面试问题之一是让面试者/计算机程序员解释mallocnew之间的区别。 mallocnew都存在于计算机语言领域,并且经常被计算机程序员用于动态内存分配。

两者之间的基本区别在于,malloc存在于C语言中,而new是C++语言的特定功能。malloc也是一个函数(对于程序员来说,这需要一些时间来执行),而new是一个操作员程序(这可以减少执行时间)。这对于新手来说是一个好处,因为进行实时编程的程序员需要选择使用最快的方法。

与函数malloc不同,new运算符是类型安全的。
函数malloc是C语言的库函数。它所做的只是分配内存并返回指向它的指针。另一方面,运算符new是语言级别的构造,其工作是通过分配内存并调用适当的构造函数来实例化对象。函数malloc与操作符new的另一个不同之处是,在声明期间malloc需要进行类型转换,而前者则不需要。同样,函数malloc使用单词free来清除内存,而类似目的,运算符new之后使用delete来清除内存。

两者在处理故障和内存耗尽方面也有不同的方式。如果函数malloc失败,则返回NULL指针。运算符new从不返回NULL指针,而是通过引发异常来指示失败。对于新手来说,这是一个优势,因为计算机程序员不必在每次调用new时都检查返回的指针,也不会使计算机程序员错过此类异常。

函数malloc不会构造对象(称为对象的构造函数),但new运算符会构造一个对象。 new的另一个优点是运算符可以重载,而函数malloc则不能。新运算符需要分配特定数量的对象,而函数malloc需要指定要分配的字节总数。

也可以通过使用malloc函数使用realloc来调整内存大小或重新分配内存。但是,新手操作员无法执行此功能,因此将其视为操作员的主要缺点之一。函数malloc相对于运算符new的另一个优点是malloc可以快速扩展内存量。这仍在使用mallocrealloc。当使用C ++语言执行相同的情况时,程序员必须使用运算符new创建新的内存块。新的内存必须具有修改的大小,并将被复制到原始缓冲区的数据上。复制后必须删除原始缓冲区。对于程序员而言,这可能是一个缓慢的过程。

运算符new通过返回确切的数据类型,而函数返回void *,从而对函数malloc产生了影响。与可能重载的new运算符相比,函数malloc也不能重载。new操作符的另一个功能是与函数malloc相比,操作符出错的机会更少。对于程序员来说,这是一个加号,特别是如果他们正在编写许多代码或在紧迫的时间里编写代码。函数mallocfree可以在C ++中使用,但不能直接使用。建议改用newdelete

总结

  1. malloc是一个函数,而new是一个运算符。
  2. new增功能是C++语言的特定功能,而在c语言中使用了malloc
    3.运算符new后面带有delete,而函数malloc带有free
    4.函数malloc是C语言的库函数,而new运算符是C ++语言的语言级构造。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:malloc和new
本文链接:https://www.vsdiffer.com/vs/malloc-vs-new.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。