-3

因此,假设我有一个名为 的数字num,如果发生某种情况 A,则将该数字增加 1,否则将其减少。

我可以这样写代码:

if (A) ++num;
else --num;

这段代码也可以在没有任何 if-else 的情况下编写,但会涉及更多的算术(只是简单的基本算术,没有指数、对数或任何需要科学计算器才能完成的事情!)像这样:

num = num * x + y;

问题是,第一个或第二个代码块会执行得更快吗?(这是在Java中,顺便说一句)。

(请不要说它没有任何区别。这只是我正在尝试做的非常“基本”的版本。但是假设有一个非常好的分析器可以测量这两者之间的运行时差异,哪个会更快?)

谢谢

4

3 回答 3

4

这种优化没有多大意义,而且大多数时候都是邪恶的,尤其是在 Java 虚拟机中,它具有 JIT 并优化了字节码。

尽可能保持代码的可读性,不要担心这种优化......

于 2012-05-27T08:00:13.547 回答
3

答案是它取决于上下文以及平台上JIT 编译器优化代码的能力。

  • 它可能不会对您的应用程序的性能产生明显的影响。

  • 即使是这样,我们也无法预测它会产生什么不同,因为它取决于您的平台(例如,取决于您使用的特定 JVM/版本)以及周围的代码。

最好的建议是编写代码只是为了给优化器最好的机会来完成它的工作。然后,如果性能是一个问题,请分析您的应用程序并查看热点在哪里,并优化热点。仅当分析器说它是热点时才优化此代码。

于 2012-05-27T07:59:00.260 回答
1

分支的成本可能比算术指令高 10 倍或更多,这毫无价值。当重复使用分支的同一侧时,处理器可以将成本降低到几乎为零,但是当分支的一侧发生变化时,这可能会花费大约 100 个时钟周期。(给定一个 ++ 或 -- 可能只是一个时钟周期,这很重要)

于 2012-05-27T08:18:10.733 回答