C ++中的malloc和new之间是不是有任何性能差异[关闭]

Posted

技术标签:

【中文标题】C ++中的malloc和new之间是不是有任何性能差异[关闭]【英文标题】:Is there any performance difference between malloc and new in C++ [closed]C ++中的malloc和new之间是否有任何性能差异[关闭] 【发布时间】:2012-12-15 03:52:07 【问题描述】:

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

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

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

提前谢谢你。

【问题讨论】:

好吧,malloc() 不会调用构造函数。您如何期待合理的比较? 是的。那么让我们比较原始类型。这样会更合理吗? 您需要在问题中说明这一点。仅仅将其放到评论中是不够的。 感谢您的建议。我是新来的! 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

当构造函数做一些真正占用 CPU 的事情时,malloc 甚至会快很多。但通常你有理由在构造函数中做所有这些事情,当你没有这样做时,你可以添加另一个没有的构造函数。但说真的,malloc 应该只用于 POD 类型,而不是对象,因为构造函数的存在通常是有原因的。【参考方案3】:

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

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

【讨论】:

以上是关于C ++中的malloc和new之间是不是有任何性能差异[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

内部联接和简单联接之间是不是有任何性能差异? [复制]

手势方法(平移手势和滑动手势)之间是不是有任何优先条件?

MaxMind 的 locid 和 GeoNames id 之间是不是有任何映射?

C ++中的“new”和“malloc”和“calloc”有啥区别? [复制]

C++ STL 中是不是有任何数据结构用于执行 log(n) 中第 k 个元素的插入、搜索和检索?

C# 中的“!=”和“不是”之间有区别吗?