计算常数的性能

时间:2012-11-05 01:17:48

标签: optimization interpreted-language compiled-language

以下两个伪代码块如何在编译语言和解释语言的速度方面进行比较? (忽略位数)

基本上,通过将变量写为几个常量的函数而不是事先计算,是否存在性能损失?这通常会使代码更清晰。

permanentNum = (3.1416 / 3) + 1.5708
return permanentNumber / userInputNumber

permanentNum = 2.6179
return permanentNumber / userInputNumber

谢谢!

3 个答案:

答案 0 :(得分:3)

首先争取代码清晰度。

然后衡量表现。如果存在性能问题,请确定瓶颈。

任何瓶颈都不太可能出现在常量(编译或解释代码)的分配中。

答案 1 :(得分:3)

Mitch Wheat的评论绝对正确;在您拥有清晰正确的代码后,只有在必要时才能进行优化。

要回答这个问题,但显然取决于语言。任何适合C语言的合适编译器都有一个常量折叠优化传递。在GCC,或Oracle的javac或任何广泛使用的编译器上,您的两个示例将生成相同的代码。

解释的语言可能足够慢,以至于一些额外算术运算的成本不是你的瓶颈,无论它是否在解析时进行常量折叠。 : - )

答案 2 :(得分:1)

编译器通常会优化这样的常量,因此即使您编写(3.1416 / 3) + 1.5708,最终会在目标代码中的值为2.6179。解释器可能会做同样的事情,但由于他们在运行时这样做,所以是的,性能会更低。

然而,差异可能会微不足道,因此,正如Mitch Wheat所说,你应该支持代码清晰度。理论分析是一回事,但确定特定代码(在您的特定环境中)的实际瓶颈的唯一方法是测试,分析,测量。