在调用提供简单数据类型的函数时,哪个更好的性能 - 填充内存位置(通过指针传递)还是让它返回简单数据?
我过于简化了这里返回静态值5的示例,但假设确定返回值的查找/功能在现实生活中是动态的......
传统逻辑会告诉我第一种方法更快,因为我们通过引用操作而不是像第二种方法那样返回副本......但是,我想要别人的意见。
由于
void func(int *a) {
*a = 5;
}
...或
int func() {
return 5;
}
答案 0 :(得分:8)
通常,如果您的函数就像一个函数(即返回一个逻辑值),那么最好使用int func()
。即使返回值是一个复杂的C ++对象,也有一个称为Return Value Optimisation的公共优化,它避免了不必要的对象复制,并使这两种形式在运行时性能上大致相同。
答案 1 :(得分:4)
只要您返回的内容足够小以适合寄存器,大多数编译器都会在寄存器中返回一个值。对于其他任何比这更有效的事情来说,这是非常不寻常的(而且通常几乎是不可能的)。
答案 2 :(得分:3)
对于POD,没有或几乎没有差异,我总是带有返回值,因为我觉得那些更干净,更容易阅读。
对于非POD,答案是“它取决于” - 许多编译器在这种情况下使用返回值优化,这往往会创建一个隐式参考参数。
然而,除非你已经测量过 - 不是“知道”,而是用分析器实际测量 - 使用返回值返回函数的结果实际上是软件的瓶颈,请选择更易读的代码版本。
答案 3 :(得分:2)
在我看来,除非你知道不这样做的理由,否则你总是选择return
,或者你必须从函数中返回多个值。返回内置类型非常有效,无论与通过指针返回的区别如何,它都必须可以忽略不计。但是,对于那些稍后阅读代码的人来说,使用return
的真正好处是更清晰,更简单。
答案 4 :(得分:2)
返回一个简单的值就像是assmbly中的一个指令(即MOV eax,xxxx),传递一个参数会引入更多的开销。无论如何你不应该担心,差异很难被注意到。 另一个重要问题是左侧的函数返回在设计方面通常更清晰,并且在可能的情况下是首选。
答案 5 :(得分:1)
这是一个低级别的事情,很难看出有什么不同。
答案 6 :(得分:1)
简单回答:这取决于。
这取决于所使用的类型,它们是否可以廉价地复制(或根本没有),编译器是否可以在某些情况下使用RVO,使用某种形式更好地内联事物......
使用在上下文中有意义的内容。