new是关键字,最后还是调用malloc->brk
malloc是函数,调用brk()
new
和 malloc
都是用于在程序运行时动态分配内存的方法,但它们有一些重要的区别:
-
语法:
new
是C++关键字,用于在堆上分配内存并同时调用对象的构造函数(如果有的话)。malloc
是C和C++中的函数,仅用于在堆上分配一块指定大小的内存,不会调用对象的构造函数。
-
类型安全:
new
是类型安全的,它会在分配内存时考虑类型的大小,并返回正确类型的指针。同时,对于类类型的对象,new
会调用构造函数。malloc
返回的是void*
类型的指针,需要手动进行类型转换,并且不会调用构造函数。
-
返回值:
new
返回指定类型的指针,因此无需显式转换。malloc
返回void*
,需要显式转换为适当的类型。
-
内存分配失败的处理:
new
在内存分配失败时会抛出std::bad_alloc
异常,需要通过try
和catch
来处理。malloc
在内存分配失败时返回NULL
,程序员需要检查返回值是否为NULL
。
-
释放内存的方式:
delete
用于释放通过new
分配的内存,并调用相应对象的析构函数。free
用于释放通过malloc
分配的内存,但不会调用对象的析构函数。
在C++中,通常更推荐使用 new
和 delete
,因为它们提供了更好的类型安全性和方便性。然而,如果你在混合使用C和C++的代码,或者在某些特定的情况下,可能需要使用 malloc
和 free
。需要注意的是,不要混合使用 new
/delete
和 malloc
/free
,以避免不一致的内存管理。