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】:唯一可以确定的方法是对编译器上的各种选项进行计时。不会有适用于所有编译器的硬性规定。
如果您正在谈论分配int
或double
的数组,那么对于任何体面的实现,您应该无法检测到性能差异。
【讨论】:
以上是关于C ++中的malloc和new之间是不是有任何性能差异[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
MaxMind 的 locid 和 GeoNames id 之间是不是有任何映射?
C ++中的“new”和“malloc”和“calloc”有啥区别? [复制]