我看过几篇关于 malloc 和 new 之间差异的帖子,我确实理解这一点。
但是,这些帖子都没有谈论性能,所以我想知道这两者之间是否存在任何性能差异,或者编译器是否本质上做同样的事情。
为了便于比较,假设我们在这里讨论的是原始类型(谢谢 Hans Passant)。
先感谢您。
我看过几篇关于 malloc 和 new 之间差异的帖子,我确实理解这一点。
但是,这些帖子都没有谈论性能,所以我想知道这两者之间是否存在任何性能差异,或者编译器是否本质上做同样的事情。
为了便于比较,假设我们在这里讨论的是原始类型(谢谢 Hans Passant)。
先感谢您。
您可能想要比较malloc()
andfree()
和operator new()
and operator delete()
(以及它们的数组形式):这是独立于对象构造分配内存的方式。性能可能非常相似,并且很可能两种方法最终都使用相同的内存池:C++ 运算符可能是一个瘦包装器malloc()
和free()
(但不是相反:用户可以安全地实现operator new()
和operator delete()
和malloc()
) free()
。
要确定实际性能,您显然需要以合理的方式分析这两种方法。如果没有这样做,我不会期望大多数系统会有太大的不同。当然,结果将特定于不同的系统。
唯一可以确定的方法是对编译器上的各种选项进行计时。不会有适用于所有编译器的硬性规定。
如果您正在谈论分配int
or的数组double
,那么对于任何体面的实现,您应该无法检测到性能差异。
答案将取决于特定的编译器,但我怀疑 new 的大多数实现只是在幕后调用 malloc。malloc 通常会稍微快一些,因为它不调用任何额外的代码(不像 new,它调用对象的构造函数)。