Optimization 模算子的边界检查效率

Optimization 模算子的边界检查效率,optimization,Optimization,我在.NET中阅读了有关操作性能的文章,发现除法操作与其他操作之间存在着巨大的差异 那么,模运算速度很慢,但是对于一个条件块的成本,我们可以用多少来达到同样的目的呢 假设我们有一个正数y,它不能大于等于20。除了在.NET中,作为一般规则,哪一个更有效 这: 或者这个: x = y if (x >= 10) { x -= 10 } 你调用了多少次模运算?如果它位于一个每秒被多次调用的紧密的内部循环中,也许您应该考虑其他防止数组溢出的方法。如果有人打电话给我,比如说10000次,我

我在.NET中阅读了有关操作性能的文章,发现除法操作与其他操作之间存在着巨大的差异

那么,模运算速度很慢,但是对于一个条件块的成本,我们可以用多少来达到同样的目的呢

假设我们有一个正数y,它不能大于等于20。除了在.NET中,作为一般规则,哪一个更有效

这:

或者这个:

x = y
if (x >= 10)
{
    x -= 10
}

你调用了多少次模运算?如果它位于一个每秒被多次调用的紧密的内部循环中,也许您应该考虑其他防止数组溢出的方法。如果有人打电话给我,比如说10000次,我就不会担心了


至于代码片段之间的性能,如果可能的话,用一些真实数据测试它们。你不知道编译器/JITer和CPU在幕后做什么。如果第二个参数为常数且幂为2,则%可能会优化为-。在CPU级别,您讨论的是除法和分支预测之间的区别,这取决于代码的其余部分。

您使用的是哪种语言?第二个代码片段本质上是不安全的,不太清晰。如果代码使用发生变化,y可以大于20,该怎么办。您更关心的是:正确的代码还是微观优化?我使用的是J2ME 1.4.2。米奇:是的,我知道第二段代码不是很好,但目前我关心的是微观优化,如果有一个一般规则的话。是的,我关心的是除法和分支预测失误之间在CPU级别的差异。如果第二个参数不是2的幂呢?目前,这在我的代码中不是一个问题,我只是出于好奇问这个问题,以防有一个一般规则。
x = y
if (x >= 10)
{
    x -= 10
}