在C ++中malloc和new之间是否有任何性能差异

时间:2012-12-30 19:36:10

标签: c++ malloc new-operator

我看过关于malloc和new之间差异的couple of posts,我明白这一点。

但是,这些帖子都没有谈论性能,所以我想知道这两者之间是否有任何性能差异,或者编译器是否基本上做同样的事情。

为了比较,让我们假设我们在这里谈论原始类型(谢谢Hans Passant)。

提前谢谢。

3 个答案:

答案 0 :(得分:8)

您可能希望将malloc()free()operator new()operator delete()(及其数组形式)进行比较:这是内存的独立分配方式建造物体。性能可能非常相似,两种方法很可能最终都使用相同的内存池:C ++运算符可能是malloc()free()之间的薄弱包装(但不是相反的方式)周围:用户可以使用operator new()operator delete()安全地实施malloc()free()

要确定实际表现,您显然需要以合理的方式分析这两种方法。尽管如此,我不希望在大多数系统上有太大差异。当然,结果将针对不同的系统。

答案 1 :(得分:3)

唯一可以确定的是为编译器计算各种选项。没有适用于所有编译器的硬性规则。

如果您正在讨论分配intdouble的数组,那么对于任何体面的实现,您都应该无法检测性能差异。

答案 2 :(得分:3)

答案取决于具体的编译器,但我怀疑大多数新实现只是简单地调用malloc。 malloc通常会稍快一些,因为它不会调用任何额外的代码(不像new,它会调用对象的构造函数)。