运算符比函数更快吗?

7

在查找newmalloc之间的区别时,我看到了这样一句话(来源):

newmalloc()更快,因为运算符总是比函数更快。

运算符总是比函数更快吗?如果是这样,为什么呢?我会非常感谢提供低级别解释(您可以假设基本编译器、SASS和硬件知识)。


10
许多实现内部使用malloc()来调用new。那个网站上没有人提到这个小事实吗? - PaulMcKenzie
13
"includehelp.com"变成了另一个需要小心互联网上读到的网站。请坚持使用被公认和同行评审(或原始)权威机构发布的信息。如果有任何疑问,可以放弃汇编并查找其他来源。 - David C. Rankin
10
“操作符总是比函数更快”这种说法纯属无稽之谈——特别是在C++中,调用操作符通常只是对调用函数的一种语法糖。 - Igor Tandetnik
3
据我所知,malloc 仅分配内存并几乎不做其他事情; new 也是如此,但还会执行构造函数 这可能需要很长时间才能运行。 我对该网站没有太多信心。 - Beta
4
看那个网站,它有多位投稿者,难道没有人拍拍肩膀说“这没道理吧”?这表明他们甚至没有进行同行评审。 - PaulMcKenzie
显示剩余10条评论
1个回答

5
“new”比“malloc()”更快并不正确。实际上,新表达式的默认行为通常是内部调用“malloc”,这种情况下它不可能更快。只要竞争的程序执行相同的操作,就没有理由期望使用一个函数比另一个函数性能更好。使用“new”而不是“malloc”的原因与性能无关。
在运行时调用函数可能比不调用函数慢。但是,正如我们发现的那样,运算符实际上可以内部调用函数。此外,抽象机器的函数调用并不一定意味着在运行时将调用函数。只要编译器能够在编译时产生函数结果,或者如果它能够展开内联调用,则不需要任何函数调用开销。因此,这取决于我们讨论的是哪些函数调用。就C++函数调用而言:它不一定比使用运算符慢。还请注意,所有对类类型进行操作的重载运算符实际上都是对运算符重载函数的函数调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接