我想知道,如何为资源非常有限的系统优化循环。比方说,如果我们有一个基本的for循环,比如(用javascript编写):
for(var i = someArr.length - 1; i > -1; i--) { someArr[i] }
我真的不知道,!=不是比>便宜吗?
我希望有任何资源用于支付基本运算符的计算成本,如前面提到的、>>、~、!等等。
发布于 2009-08-18 20:44:07
在现代CPU上的性能绝非微不足道。以下是几件让事情复杂化的事情:
因此,简单的回答是“不要试图超越编译器”。如果您能够在两个等效表达式之间进行选择,编译器可能也可以这样做,并且将选择最有效的表达式。根据上述所有因素,一项指令的成本各不相同。正在执行的其他指令,CPU缓存中的数据,运行的代码是哪个精确的CPU模型,等等。在一种情况下,超级高效的代码在另一种情况下可能非常低效。编译器将尝试选择最普遍有效的指令,并尽可能地对它们进行调度。除非您对此了解得比编译器多,否则您不太可能做得更好。
除非你真的知道你在做什么,否则不要尝试这样的微优化。正如上面所示,低级别的性能是一个非常复杂的问题,而且编写“优化”非常容易,从而导致代码的速度要慢得多。或者仅仅是牺牲可读性去做一些根本没有意义的事情。
此外,大多数代码对性能没有可衡量的影响。人们通常喜欢在这个问题上引用(或误用) Knuth:
我们应该忘记小效率,大约97%的时间说:过早的优化是万恶之源
人们通常将此理解为“不必费心地优化代码”。如果你真的读了完整的引语,一些更有趣的后果就会变得清晰起来:
大多数时候,我们应该忘记微优化。大多数代码很少被执行,所以优化并不重要。考虑到CPU每秒可以执行的指令数,很明显,必须经常执行代码块才能使其中的优化产生任何效果。因此,大约97%的时间,您的优化将是浪费时间。但他也说,有时候(3%的时间),你的优化很重要。显然,寻找这3%有点像在干草堆中寻找一根针。如果您只是决定“优化您的代码”在一般情况下,您将浪费您的时间在前97%。相反,您需要首先找到实际需要优化的3%。换句话说,通过分析器运行您的代码,让它告诉您哪些代码占用CPU时间最多。那你就知道该怎么优化了。然后,您的优化不再是过早的。
发布于 2009-08-18 20:21:17
这种微优化不太可能在任何最极端的(实时嵌入式系统?)中对您的代码产生显著的影响。环境。您的时间可能会得到更好的服务,担心代码的可读性和可维护性。
当有疑问时,一定要先问唐纳德·库思:
http://shreevatsa.wordpress.com/2008/05/16/premature-optimization-is-the-root-of-all-evil/
或者,对于稍微不那么高调的微观优化:
http://www.codinghorror.com/blog/archives/000185.html
发布于 2009-08-18 20:20:08
大多数比较都是相同的,因为处理器只是在所有方面对其进行比较,然后根据以前的比较产生的标志做出决定,所以比较信号根本不重要。但是,有些体系结构试图根据您正在比较的值来加速这个过程,比如比较0。
据我所知,按位运算是最便宜的操作,比加减略快。乘法和除法运算比较昂贵,而比较运算是最高的海岸运算。
https://stackoverflow.com/questions/1296163
复制相似问题