招聘计算机程序员时最常见的面试问题之一是让面试者/计算机程序员解释malloc
和new
之间的区别。 malloc
和new
都存在于计算机语言领域,并且经常被计算机程序员用于动态内存分配。
两者之间的基本区别在于,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
可以快速扩展内存量。这仍在使用malloc
和realloc
。当使用C ++语言执行相同的情况时,程序员必须使用运算符new
创建新的内存块。新的内存必须具有修改的大小,并将被复制到原始缓冲区的数据上。复制后必须删除原始缓冲区。对于程序员而言,这可能是一个缓慢的过程。
运算符new
通过返回确切的数据类型,而函数返回void *
,从而对函数malloc
产生了影响。与可能重载的new
运算符相比,函数malloc
也不能重载。new
操作符的另一个功能是与函数malloc
相比,操作符出错的机会更少。对于程序员来说,这是一个加号,特别是如果他们正在编写许多代码或在紧迫的时间里编写代码。函数malloc
和free
可以在C ++中使用,但不能直接使用。建议改用new
和delete
。
总结
malloc
是一个函数,而new
是一个运算符。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
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。