在寻找new
和malloc
之间的差异时,我遇到了以下语句(source):
new比malloc()快,因为运算符总是比函数快。
运算符是否总是比函数更快?如果是这样,为什么?我将非常感谢低级的解释(您可以假设基本的编译器,SASS和硬件知识)。
答案 0 :(得分:2)
new比malloc()快,因为运算符总是比函数快。
这是完全不正确的。实际上,新表达式的默认行为是内部调用malloc
,这在通常情况下不可能更快。
只要有竞争的程序做相同的事情,就没有理由期望使用另一种程序会有不同的性能。使用new
代替malloc
的原因与性能无关。
运算符比函数快吗?
在运行时调用函数可能比不调用函数要慢。
但是,正如我们所发现的,操作员实际上可以在内部调用函数。此外,对抽象机的函数调用并不一定意味着将在运行时调用函数。只要编译器能够在编译时生成函数的结果,或者能够扩展内联调用,那么就不需要任何函数调用开销。
因此,这取决于我们正在讨论的函数调用。就C ++函数调用而言:它不一定比使用运算符慢。
还要注意,所有对类类型进行操作的重载运算符实际上都是对运算符重载函数的函数调用。