以下两个伪代码块在编译语言和解释语言的速度方面如何比较?(忽略位数)
本质上,将变量写成几个常数的函数,而不是事先计算,会不会有任何性能损失?这通常会使代码更清晰。
permanentNum = (3.1416 / 3) + 1.5708
return permanentNumber / userInputNumber
.
permanentNum = 2.6179
return permanentNumber / userInputNumber
谢谢!
以下两个伪代码块在编译语言和解释语言的速度方面如何比较?(忽略位数)
本质上,将变量写成几个常数的函数,而不是事先计算,会不会有任何性能损失?这通常会使代码更清晰。
permanentNum = (3.1416 / 3) + 1.5708
return permanentNumber / userInputNumber
.
permanentNum = 2.6179
return permanentNumber / userInputNumber
谢谢!
首先努力使代码清晰。
然后测量性能。如果存在性能问题,请确定瓶颈。
任何瓶颈都不太可能出现在常量分配(编译或解释代码)中。
Mitch Wheat 的评论绝对正确;优化是在您拥有清晰正确的代码之后才要做的事情,并且只有在必要时才要做。
但是,要回答这个问题,这显然取决于语言。任何适用于类 C 语言的体面的编译器都有一个常量折叠优化通道。在 GCC、Oracle 的 javac 或任何广泛使用的编译器上,您的两个示例将生成相同的代码。
解释性语言可能足够慢,以至于一些额外算术运算的成本不是您的瓶颈,无论它是否在解析时进行常量折叠。:-)
编译器通常会像这样优化常量,因此即使您编写(3.1416 / 3) + 1.5708
最终将出现在目标代码中的值也是2.6179
. 解释器可能会做同样的事情,但由于他们是在运行时做的,所以是的,性能会更低。
但是,差异可能可以忽略不计,因此,正如 Mitch Wheat 所说,您应该支持代码清晰。理论分析是一回事,但确定特定代码(在特定环境中)的实际瓶颈是什么的唯一方法是测试、分析和测量。