4

这是我在这里的第一篇文章。

我知道这个问题可能看起来很模糊,我会尽量弄清楚......

全球范围内不针对任何解释语言(我目前正在使用 C#,但我认为答案也应该适用于其他人......)

我想知道,这种类型的电话:

Afunction(var1,var2,AnotherFunction(var3,var2,AthirdFunction(Avector.z)),Mathf.RoundToInt(Avector.x));

运行速度将比:

Type var1 = avalue;
Type var2 = avalue;
Type var3 = avalue;
Type var4 = AthirdFunction(Avector.z);
Type var5 = Mathf.RoundToInt(Avector.x);
Type var6 = AnotherFunction(var3,var2,var4);

Afunction(var1,var2,var6,var5);

我知道第二种方法更容易阅读,但它运行得更快,因为我知道我可能会广泛调用这个函数(比如说,在图形应用程序中,每一帧)。关于内存使用,最好在使用函数后立即创建更多变量以销毁它,还是直接在“Afunction”中编写所有内容,同时声明尽可能少的变量......

(并且为了理解:Afunction(), AnotherFunction() and AthirdFunction()已经在其他地方声明)

我希望这类问题不超出论坛使用规则...

4

1 回答 1

1

假设一个合理的编译器,您在 Afunction、AnotherFunction 和 AthirdFunction 中使用的算法对性能的影响比您上面询问的任何其他算法都大。通常,一旦您拥有最有效的功能,您就会担心您所询问的内容。

另外,编译器将内联函数调用,这意味着您可以调用

return_value = fx( A(), B() );

但是,如果您要查看编译器的汇编器输出通过什么,事情可能看起来不是那样的。

调用函数调用会产生开销,而系统和编译器架构决定了开销是多少。

如果这是一种解释型语言,如 awk 或 BASIC,那么第二个代码块,线性调用函数外部的东西,将运行得更快。或者更准确地说,它早在 1980 年代就在 DEC PDP 上做了。

于 2012-12-15T12:09:48.333 回答