按位显式替换模运算?
Explicitly substitute modulo operation by bitwise?
据我所知,模 %
是一个相当昂贵的操作,由下面的除法操作支持,CPU 的最慢操作。
是否值得用代码中的按位模拟 number & (divisor - 1)
显式替换此操作,或者 JIT
是否可以隐式地为我们执行此操作?
据我所知,JIT
没有优化这样的表达式:
number%divisor
并不比 number & (divisor - 1)
快(慢或相同),因为 divisor
是常量(所以 divisor - 1
可以在编译时计算)。
很难说差异有多大,因为在现代 CPU 这将取决于它周围的代码、缓存状态和许多其他因素。
PS:请记住,只有当 divisor
是 2
的幂时,优化才会起作用。
据我所知,模 %
是一个相当昂贵的操作,由下面的除法操作支持,CPU 的最慢操作。
是否值得用代码中的按位模拟 number & (divisor - 1)
显式替换此操作,或者 JIT
是否可以隐式地为我们执行此操作?
据我所知,JIT
没有优化这样的表达式:
number%divisor
并不比 number & (divisor - 1)
快(慢或相同),因为 divisor
是常量(所以 divisor - 1
可以在编译时计算)。
很难说差异有多大,因为在现代 CPU 这将取决于它周围的代码、缓存状态和许多其他因素。
PS:请记住,只有当 divisor
是 2
的幂时,优化才会起作用。