Malloc 与 New:区别与比较

Malloc 是 C 语言的一个特性,而 new 是 C++ 的一个基本特性。 Malloc 本质上是一个标准函数,而 new 是一个运算符。 没有必要的原因,不应在 C++ 中使用 Malloc。

新建/删除不应与 malloc/free 混合使用。 与 malloc 不同,new 不需要运算符的大小。

关键精华

  1. Malloc 和 new 都用于在 C++ 程序中动态分配内存。
  2. Malloc 是一个 C 库函数,它返回一个指向指定大小的内存块的指针。 同时new是C++中的一个运算符,分配内存,构造指定类型的对象。
  3. New 比 malloc 更安全,因为它确保调用对象的构造函数,这可以防止错误和内存泄漏。

Malloc 与 New

Malloc 是一个标准的 C 函数,只能在 C++ 中使用,并且不允许合法地覆盖。 它代表内存分配,用于分配一块内存。 New 是仅在 C++ 中使用的运算符; 它不能在 C 中使用并使用编译器计算内存的大小。

Malloc 与 New

Malloc 需要知道运算符的确切大小才能确定它必须分配的内存大小。 Malloc 也无法调用 构造函数. 当它感觉到内存不足时,它会返回 NULL。

新运算符不需要任何关于运算符确切大小的先验信息来分配内存位置。 new 运算符还可以调用对象的构造函数。 众所周知,提出一个 例外 当内存不足时。

对比表

比较参数马洛克全新
在语言中的位置Malloc在C中用的比较多,很少用,在C++中用的比较多。
New 仅在 C++ 中使用。
退货政策 它返回到 void。
New 返回正确的类型。
尺寸在 malloc 中,大小必须手动计算。
在 New 中,编译器所需的大小由编译器计算
覆写不能合法地覆盖 malloc 函数。
new 运算符提供了覆盖的机会。
TypeMalloc 是一个标准的 C 函数。
它使用 ==、+= 等运算符。
内存不足时的行为当内存不足时,Malloc 返回 NULL。
New 在内存不足时引发异常。
解除分配malloc() 应该与 free() 匹配。
new() 应该与 delete() 相匹配。
分配内存几乎所有的东西。
仅适用于数组、对象和结构。

什么是马洛克?

Malloc() 是 C 中用于内存分配的标准库函数。 它用于动态分配具有特定大小的内存块。 内存的大小以字节为单位分配。

另请参阅:  VMware ESX 与 VMware ESXi:区别与比较

它返回一个 void 类型 指针 因为它带有一些垃圾价值。 它在执行时不初始化内存。

Malloc 函数应该只在非常需要使用的时候才在 C++ 中使用,否则,它的使用应该仅限于 C。当 malloc 感觉到内存不足时,它会立即返回 NULL。 它不执行内存初始化。

它包含 2 个参数。 malloc() 必须始终与 free() 匹配。 malloc 中的内存大小必须手动计算。 它需要有关运算符大小的先验知识来分配内存的大小。

它不能调用对象的构造函数。 malloc 函数可用于为几乎所有内容分配内存。 Malloc 函数不允许合法覆盖。

在 C++ 中,malloc 比 new 运算符运行得慢,因为运算符总是比函数快。

语法:- ptr = (castType*) malloc(size);

什么是新的?

New是C++中的一个运算符,不能在C中使用。new运算符可以调用对象的构造函数并可以初始化内存。 仅在分配内存后调用构造函数。

编译器计算内存的大小。 它返回到正确的类型。 它可以使用 ==、+= 等运算符。new 运算符仅为数组、对象和结构分配内存。

在C++中,new运算符用于提出在堆上分配内存的请求。

如果有足够的可用内存,new 运算符会对其进行初始化,然后将新分配和形成的内存返回给指针变量。 new() 应始终与 delete() 匹配。

另请参阅:  Oberlo vs Shopify:差异与比较

该运算符用于动态内存分配、对象构造和销毁。 内存是为来自称为自由存储的池中的对象分配的。 它的运行速度比 malloc 快得多,因为它是一个运算符而不是一个函数。 

语法:- pointer-variable = new data-type;

Malloc 和 New 之间的主要区别

  1. Malloc 是一个标准的 C 函数,而 new 是一个运算符。
  2. Malloc 主要用于 C,而 new 仅用于 C++。 Malloc 只应在必要时在 C++ 中使用。
  3. 当内存不足时,malloc 返回 NULL 而 new 则抛出异常。
  4. 总是 malloc() 应该与 free() 和 new() 与 delete 相匹配。 这两个不应该互换
  5. Malloc 返回 void 而 new 返回正确的类型。
  6. Malloc 为几乎任何东西分配内存。 New 为数组、对象和结构分配内存。
  7. 必须为 malloc 手动计算大小,而在 new 中,它由编译器自动计算。
  8. Malloc 函数不能调用对象的构造函数,但 new 运算符可以。
  9. 在 malloc 中法律上不允许覆盖,但在 new 中允许覆盖。
参考资料
  1. https://dl.acm.org/doi/abs/10.1145/1854273.1854303
  2. https://dl.acm.org/doi/abs/10.1145/2948618.2954331

最后更新时间:11 年 2023 月 XNUMX 日

点1
一个请求?

我付出了很多努力来写这篇博文,为您提供价值。 如果您考虑在社交媒体上或与您的朋友/家人分享,这对我很有帮助。 分享是♥️

关于“Malloc 与 New:差异与比较”的 12 个思考

  1. 我很欣赏对 Malloc 在 C 和 C++ 中的用法的详尽解释,以及 C++ 中 new 运算符的详细特性。非常丰富的比较。

    回复
  2. 对 Malloc 和 New 的详细见解,以及它们在用法和行为方面的比较,都得到了非常好的呈现。对于程序员来说是一本很棒的读物。

    回复
  3. Malloc 和 New 之间突出的主要差异使得区分它们的用例变得更容易。这篇文章对于程序员来说是宝贵的资源。

    回复
  4. 概述内存短缺时 Malloc 和 New 行为的部分特别有洞察力,增强了人们对 C 和 C++ 中动态内存分配的理解。

    回复

发表评论

想保存这篇文章以备后用? 点击右下角的心形收藏到你自己的文章箱!