malloc和new的区别是什么?

1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们均可用于申请动态内存和释放内存。
2,对于非内部
数据类型的对象而言,光用maloc/free没法知足动态对象的要求。对象在建立的同时要自动执行构造函数,对象在消亡以前要自动执行析构函数。因为malloc/free是库函数而不是运算符,不在编译器控制权限以内,不可以把执行构造函数析构函数的任务强加于malloc/free。
3,所以C++语言须要一个能完成动态内存分配和初始化工做的
运算符new,以一个能完成清理与释放内存工做的运算符delete。注意new/delete不是库函数
4,C++程序常常要调用C函数,而C程序只能用malloc/free管理动态内存。

五、new能够认为是malloc加
构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针。

一:new delete 是运算符,malloc,free是函数

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们均可用于申请动态内存和释放内存。

对于非内部
数据类型的对象而言,光用maloc/free没法知足动态对象的要求。对象在建立的同时要自动执行构造函数,对象在消亡以前要自动执行析构函数。因为malloc/free是库函数而不是运算符,不在编译器控制权限以内,不可以把执行构造函数和析构函数的任务强加于malloc/free。

所以C++语言须要一个能完成动态内存分配和初始化工做的运算符new,以及一个能完成清理与释放内存工做的运算符delete。注意new/delete不是库函数。程序员



new的对象在堆里面,而malloc的对象在自由存储区里面。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由咱们的应用程序去控制,通常一个new就要对应一个delete。若是程序员没有释放掉,那么在程序结束后,操做系统会自动回收。 自由存储区,就是那些由malloc等分配的内存块,他和堆是十分类似的,不过它是用free来结束本身的生命的。ide

相关文章
相关标签/搜索