做得比比较少或小于或等于或等于比较更有效

Is It More Efficient to Do a Less Than comparison OR a Less Than Or Equal To?

本文关键字:比较 有效 于比较 小于      更新时间:2023-10-16

我想知道做得比循环中的比较少或等于比较更有效。<=操作员是否指示计算机进行两个比较(它比它等于),还是简化了?以以下示例。我想要一个循环,而不是增加1000。我应该将天花板设置为1001并告诉它while i is < (OR !=) 1001, i++;吗?还是我应该告诉while i <= 1000, i++;?编译器(GCC)是否将其简化为相同的基本说明?

机器级体系结构将具有针对&lt的OP代码;和&lt; =操作和两个比较可以在CPU的一个周期中进行。这意味着没有区别。

它取决于体系结构。

原始的von Neumann IAS体系结构(1945)确实具有>=比较。

英特尔8086可以使用Loop label范式,该范式对应于do { } while (--cx > 0);
在传统体系结构中,LOOP不仅较小,而且更快。在现代体系结构中,LOOP被认为是复杂的操作,在优化大小(-os)时,它比dec ecx; jnz label;慢。

进一步的考虑是,某些(RISC)架构没有明确的标志寄存器。然后,比较不能自由,作为循环减小的副作用。一些RISC架构也具有特殊的"零"寄存器,这意味着,始终可用的具有零的比较(以及其他所有数学操作)。带有跳跃延迟插槽的RISC 甚至可能受益于使用后减少:do { } while (a-- > 0);

优化编译器应该能够将简单的循环转换为给定体系结构最优化的版本。一个复杂的循环对迭代器,副作用或两者都具有依赖性:for (i=0;i<5;i++) func(i);

测量它。只有这样,您才可以绝对确定哪个更快。

您可能会对在此处发挥作用的所有作用(编译器,优化,处理器等)进行思考。但是最后,如果花费更少的时间,则更快。就像那样简单。