Malloc 是 C 语言的一个特性,而 new 是 C++ 的一个基本特性。 Malloc 本质上是一个标准函数,而 new 是一个运算符。 没有必要的原因,不应在 C++ 中使用 Malloc。
新建/删除不应与 malloc/free 混合使用。 与 malloc 不同,new 不需要运算符的大小。
关键精华
- Malloc 和 new 都用于在 C++ 程序中动态分配内存。
- Malloc 是一个 C 库函数,它返回一个指向指定大小的内存块的指针。 同时new是C++中的一个运算符,分配内存,构造指定类型的对象。
- New 比 malloc 更安全,因为它确保调用对象的构造函数,这可以防止错误和内存泄漏。
Malloc 与 New
Malloc 是一个标准的 C 函数,只能在 C++ 中使用,并且不允许合法地覆盖。 它代表内存分配,用于分配一块内存。 New 是仅在 C++ 中使用的运算符; 它不能在 C 中使用并使用编译器计算内存的大小。
Malloc 需要知道运算符的确切大小才能确定它必须分配的内存大小。 Malloc 也无法调用 构造函数. 当它感觉到内存不足时,它会返回 NULL。
新运算符不需要任何关于运算符确切大小的先验信息来分配内存位置。 new 运算符还可以调用对象的构造函数。 众所周知,提出一个 例外 当内存不足时。
对比表
比较参数 | 马洛克 | 全新 |
---|---|---|
在语言中的位置 | Malloc在C中用的比较多,很少用,在C++中用的比较多。 | New 仅在 C++ 中使用。 |
退货政策 | 它返回到 void。 | New 返回正确的类型。 |
尺寸 | 在 malloc 中,大小必须手动计算。 | 在 New 中,编译器所需的大小由编译器计算 |
覆写 | 不能合法地覆盖 malloc 函数。 | new 运算符提供了覆盖的机会。 |
Type | Malloc 是一个标准的 C 函数。 | 它使用 ==、+= 等运算符。 |
内存不足时的行为 | 当内存不足时,Malloc 返回 NULL。 | New 在内存不足时引发异常。 |
解除分配 | malloc() 应该与 free() 匹配。 | new() 应该与 delete() 相匹配。 |
分配内存 | 几乎所有的东西。 | 仅适用于数组、对象和结构。 |
什么是马洛克?
Malloc() 是 C 中用于内存分配的标准库函数。 它用于动态分配具有特定大小的内存块。 内存的大小以字节为单位分配。
它返回一个 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() 匹配。
该运算符用于动态内存分配、对象构造和销毁。 内存是为来自称为自由存储的池中的对象分配的。 它的运行速度比 malloc 快得多,因为它是一个运算符而不是一个函数。
语法:- pointer-variable = new data-type;
Malloc 和 New 之间的主要区别
- Malloc 是一个标准的 C 函数,而 new 是一个运算符。
- Malloc 主要用于 C,而 new 仅用于 C++。 Malloc 只应在必要时在 C++ 中使用。
- 当内存不足时,malloc 返回 NULL 而 new 则抛出异常。
- 总是 malloc() 应该与 free() 和 new() 与 delete 相匹配。 这两个不应该互换
- Malloc 返回 void 而 new 返回正确的类型。
- Malloc 为几乎任何东西分配内存。 New 为数组、对象和结构分配内存。
- 必须为 malloc 手动计算大小,而在 new 中,它由编译器自动计算。
- Malloc 函数不能调用对象的构造函数,但 new 运算符可以。
- 在 malloc 中法律上不允许覆盖,但在 new 中允许覆盖。
- https://dl.acm.org/doi/abs/10.1145/1854273.1854303
- https://dl.acm.org/doi/abs/10.1145/2948618.2954331
最后更新时间:11 年 2023 月 XNUMX 日
Sandeep Bhandari 拥有塔帕尔大学计算机工程学士学位(2006 年)。 他在技术领域拥有 20 年的经验。 他对各种技术领域都有浓厚的兴趣,包括数据库系统、计算机网络和编程。 你可以在他的网站上阅读更多关于他的信息 生物页面.
对于对 C 和 C++ 感兴趣的程序员来说,这是一篇优秀且非常有教育意义的文章。
Malloc 和 New 之间的详细比较对于理解它们的主要区别确实很有帮助。很棒的文章!
为 Malloc 和 New 提供的语法使得更容易理解它们的实现。本文在分解复杂概念方面做得非常出色。
我很欣赏对 Malloc 在 C 和 C++ 中的用法的详尽解释,以及 C++ 中 new 运算符的详细特性。非常丰富的比较。
深入分析 C 和 C++ 中的 Malloc 和 New 功能。有效讨论了两种内存分配方法的优缺点。
对 Malloc 和 New 的详细见解,以及它们在用法和行为方面的比较,都得到了非常好的呈现。对于程序员来说是一本很棒的读物。
Malloc 和 New 之间突出的主要差异使得区分它们的用例变得更容易。这篇文章对于程序员来说是宝贵的资源。
这篇文章对 Malloc 和 New 进行了全面的比较,并且解释非常清晰易懂。对 C 和 C++ 编程感兴趣的人必读。
概述内存短缺时 Malloc 和 New 行为的部分特别有洞察力,增强了人们对 C 和 C++ 中动态内存分配的理解。
提供的比较表有助于以清晰简洁的方式总结 Malloc 和 New 之间的差异。很喜欢读它。
这篇文章很好地强调了使用 Malloc 和 New 的内存分配过程,以及它们在内存初始化和释放内存方面的差异。
本文清楚地解释了 Malloc 和 New 之间的区别、它们在 C 和 C++ 中的用法,以及函数和运算符的具体行为。信息非常丰富。