模运算符的边界检查效率

时间:2011-03-17 00:20:01

标签: optimization

我正在阅读this page关于.NET中的操作性能,并看到除法操作与其余操作之间存在巨大差异。

然后,模运算符很慢,但是对于我们可以用于相同目的的条件块的成本是多少?

假设我们有一个正数y,它不能是> = 20.哪一个作为一般规则更有效(不仅仅是在.NET中)?

此:

x = y % 10

或者这个:

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

1 个答案:

答案 0 :(得分:0)

您调用模运算的次数是多少?如果它在某个紧密的内部循环中被调用多次,那么你应该看看其他防止数组溢出的方法。如果被称为< (比方说)10,000次,我不担心。

至于您的代码段之间的效果 - 测试它们(如果可能的话,使用一些真实数据)。你不知道编译器/ JITer和CPU在做什么。如果第二个参数是常量且幂为2,则%可以优化为&。在CPU级别,您正在讨论除法和分支预测之间的差异,这将是取决于你的其余代码。