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,以避免不一致的内存管理。