我看过关于malloc和new之间差异的couple of posts,我明白这一点。
但是,这些帖子都没有谈论性能,所以我想知道这两者之间是否有任何性能差异,或者编译器是否基本上做同样的事情。
为了比较,让我们假设我们在这里谈论原始类型(谢谢Hans Passant)。
提前谢谢。
答案 0 :(得分:8)
您可能希望将malloc()
和free()
与operator new()
和operator delete()
(及其数组形式)进行比较:这是内存的独立分配方式建造物体。性能可能非常相似,两种方法很可能最终都使用相同的内存池:C ++运算符可能是malloc()
和free()
之间的薄弱包装(但不是相反的方式)周围:用户可以使用operator new()
和operator delete()
安全地实施malloc()
和free()
。
要确定实际表现,您显然需要以合理的方式分析这两种方法。尽管如此,我不希望在大多数系统上有太大差异。当然,结果将针对不同的系统。
答案 1 :(得分:3)
唯一可以确定的是为编译器计算各种选项。没有适用于所有编译器的硬性规则。
如果您正在讨论分配int
或double
的数组,那么对于任何体面的实现,您都应该无法检测性能差异。
答案 2 :(得分:3)
答案取决于具体的编译器,但我怀疑大多数新实现只是简单地调用malloc。 malloc通常会稍快一些,因为它不会调用任何额外的代码(不像new,它会调用对象的构造函数)。