2011-09-08 114 views
5

我记得多年前,听说循环递减而不是递增更有效,特别是在编程微处理器时。 这是真的吗?如果是这样,原因是什么?更好地减少循环?

+0

也许它取决于将'ECX'递减为零的汇编程序指令'LOOP'。但在高级语言中,这不应该产生太大的影响。 – Nobody

+0

C#标签令人困惑:您的问题取决于CPU架构,但C#被编译为IL代码,可根据指令集将其翻译为不同的机器代码指令 –

+0

如果您的实际代码比其他代码快,张贴它并问为什么。否则,这不是一个非常有用的问题。 – Gabe

回答

10

从蝙蝠身上发生的一件事是递减循环的结束条件可能会更快。如果循环到certian值,则每次迭代都需要与该值进行比较。但是,如果循环为零,那么大多数处理器上的递减会自动设置零标志,如果减量值为零,则不需要额外的比较操作。

我认识的小土豆,但是在一个紧密的内部循环中,它可能很重要。

+0

这确实是答案 –

+0

如果你可以张贴一些时间分析显示这种效果,这个问题可能值得重新打开。 – Gabe

+2

@加贝 - 一个奇怪的请求。一般来说,我实际上赞同你对这种微型优化的怀疑。我绝对不会混淆我的HLL代码来做到这一点,除非我有数字显示它帮助了很多。但是,(在像M68K或Ix86这样的处理器上)这需要额外的指令这一事实是毋庸置疑的。我不认为我真的有足够的空闲时间来确定地向您证明,执行任何指令都比执行指令更快。 –

2

在c#中,效率没有任何区别。减少循环的唯一原因是如果循环访问集合并随时删除项目。

0

不知道递减,但我知道使用++我而不是i ++更具有高性能。

网上有很多文章为什么会这样,但归结到这一点:使用++我让它自动地被声明为第一次,并且使用i ++不会那样做。 (在C#至少)

同样,不知道递减时更好的性能,只是想我会扔东西在那里看到你是如何询问性能:)

你只使用递减,因为在我所知道的某些情况下它更容易。

+1

肯定这不是真的 –