我有一个关于优化代码速度的快速问题。
在函数中返回double或将指针指向double作为参数之一是否更快?
返回双
double multiply(double x,double y) {
return x * y;
}
指针参数
void multiply(double x,double y,double *xy) {
*xy = x * y;
}
答案 0 :(得分:4)
您在此处讨论的那种决定通常被称为微优化 - 您通过微小的改变而不是重新思考程序的整体策略来优化代码。通常,"微优化"具有以不太明显的方式重写某些东西的内涵,旨在挤出更多的性能。"语言从函数中传递数据的明确方式是通过返回值,程序员习惯于查看原始类型的数据,因此如果您要去“脚本”#34;并使用这样的参数,应该有充分的理由这样做。
您是否绝对肯定此代码执行频繁,以至于值得考虑重写会使为了提高效率而难以阅读?一个好的优化编译器可能无论如何都要内联这个函数调用,所以很可能没有太大的成本。为了确保它真的值得重写代码,你应该首先运行一个分析器并获得有关这个特定代码真正成为瓶颈的确凿证据。
一旦您收集到证据表明这实际上会减慢您的程序速度,请采取措施并询问 - 您为什么要进行这么多次乘法?您可能会问,是否存在可以使用的不同算法需要更少的乘法,而不是进行微观优化。这些变化更有可能导致性能提升。
最后,如果你确定这是瓶颈,并且你确定没有办法摆脱乘法,那么你应该问这个改变是否会做任何事情。为此,找出答案的唯一真正方法是进行改变并衡量差异。这种变化非常小,以至于大多数优秀的编译器都足够智能,可以实现您正在做的事情并相应地进行优化。结果,如果你真的看到了这里的性能提升,我会感到很惊讶。
总结:
可读性比效率更有价值,作为一个起点,它值得使用"权利"这项工作的语言功能。最初只需使用return语句。
如果你有充分的证据表明你所拥有的功能是一个瓶颈,那么看看你是否真的需要通过寻找更优化代码的更大图片来多次调用该函数。
如果您绝对需要多次调用此功能,请进行更改并查看其是否有效 - 但不要指望它实际上会因为更改而有所作为是次要的,优化编译器很聪明。