2

我正在编写一个在任何情况下都需要大量数字运算的程序。

通常,我可以选择通过 {3-4 个加法或乘法以及一个或两个 if-else 检查,可能是大约五个数字} 来计算一个值,或者从查找表中读取该值。一切都是int。

与这些简单的操作相比,内存读取的速度有多快?

4

2 回答 2

3

这是不可能以任何有意义的方式回答的。这取决于实际代码以及您使用的平台。作为一般规则,如果有一些简单的本地优化可能会起作用,JIT 编译器会为您完成它们。

您最好执行以下操作:

  1. 以简单自然的方式编写程序。
  2. 让它工作。
  3. 在典型的输入数据集/问题上运行它。如果速度够快,就停下来。
  4. 在执行典型的输入数据集/问题时分析代码。
  5. 使用分析结果来识别代码中最关键的热点。
  6. 检查代码,并确定可能的优化。
  7. 对优化进行编码并重新运行分析。它改善了情况吗?
  8. 从第 3 步开始重复,直到程序运行得足够快,或者您已经用尽了可能的优化。

查找表的问题在于您正在用时间换取空间,而空间使用取决于您的应用程序使用的输入组合的数量。查找表方法仅在有限的情况下有效。

于 2012-04-19T11:35:16.287 回答
3

性能调优的基本原理;“不要猜测,测量它”

于 2012-04-19T11:38:19.220 回答