3

我看过几篇关于 malloc 和 new 之间差异的帖子,我确实理解这一点。

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

为了便于比较,假设我们在这里讨论的是原始类型(谢谢 Hans Passant)。

先感谢您。

4

3 回答 3

8

您可能想要比较malloc()andfree()operator new()and operator delete()(以及它们的数组形式):这是独立于对象构造分配内存的方式。性能可能非常相似,并且很可能两种方法最终都使用相同的内存池:C++ 运算符可能是一个瘦包装器malloc()free()(但不是相反:用户可以安全地实现operator new()operator delete()malloc()) free()

要确定实际性能,您显然需要以合理的方式分析这两种方法。如果没有这样做,我不会期望大多数系统会有太大的不同。当然,结果将特定于不同的系统。

于 2012-12-30T19:45:20.943 回答
3

唯一可以确定的方法是对编译器上的各种选项进行计时。不会有适用于所有编译器的硬性规定。

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

于 2012-12-30T19:38:39.220 回答
3

答案将取决于特定的编译器,但我怀疑 new 的大多数实现只是在幕后调用 malloc。malloc 通常会稍微快一些,因为它不调用任何额外的代码(不像 new,它调用对象的构造函数)。

于 2012-12-30T19:39:29.640 回答