做得比比较少或小于或等于或等于比较更有效
Is It More Efficient to Do a Less Than comparison OR a Less Than Or Equal To?
我想知道做得比循环中的比较少或等于比较更有效。<=
操作员是否指示计算机进行两个比较(它比它等于),还是简化了?以以下示例。我想要一个循环,而不是增加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);
。
测量它。只有这样,您才可以绝对确定哪个更快。
您可能会对在此处发挥作用的所有作用(编译器,优化,处理器等)进行思考。但是最后,如果花费更少的时间,则更快。就像那样简单。
- 比较C++中两个整数的最有效和最干净的方法是什么?
- 比较C++变量的最有效方法
- 如何在 CUDA 中(有效地)将大量向量相互比较
- 有效比较整数列表与C++中给定的整数
- (C++)比较两段代码,一段有效,一段无效,无法找出区别
- 三向比较运算符是否始终有效
- C 有效比较整数序列(相对顺序)
- 做得比比较少或小于或等于或等于比较更有效
- 比较向量中元素的最有效、最快捷的方法
- 在客户端和远程服务器中比较文件列表的有效方法是什么?
- STD :: SET的有效比较功能
- 正在检查用户的有效输入并与文本文件进行比较
- 两种数字比较方法中哪一种更有效
- 以最有效的方式比较两个向量
- 比较float比double更有效吗
- 推力::max_element 比较慢 cublasIsamax - 更有效的实现
- 如何在C++中有效地比较两种模式
- 最有效的const-char*比较是不区分大小写的
- 有效地比较QString和std::string是否相等
- 有效地将数字向量的每个元素与前一个元素进行比较