问题说明了一切.有谁知道以下......
size_t div(size_t value) {
const size_t x = 64;
return value / x;
}
Run Code Online (Sandbox Code Playgroud)
...优化成?
size_t div(size_t value) {
return value >> 6;
}
Run Code Online (Sandbox Code Playgroud)
编译器会这样做吗?(我的兴趣在于GCC).是否有这样的情况,有些情况不是吗?
我真的很想知道,因为每当我写一个可以像这样优化的师时,我会花费一些心理能量,想知道一秒钟的宝贵事迹是否会浪费在一个转变就足够的分裂上.
在玩jmh时,我遇到了一个奇怪的事情,我无法解释.
@BenchmarkMode(Mode.SingleShotTime)
@Measurement(iterations = 10, batchSize = Integer.MAX_VALUE)
@Warmup(iterations = 5, batchSize = Integer.MAX_VALUE)
@State(Scope.Thread)
public class Tests {
private int value;
@Setup(Level.Iteration)
public void setUp() {
value = 1230;
}
@Benchmark
public boolean testConstModN() {
return 12345 % value == 0;
}
@Benchmark
public boolean testNModConst() {
return value % 12345 == 0;
}
}
Run Code Online (Sandbox Code Playgroud)
结果如下
Benchmark Mode Cnt Score Error Units
Tests.testConstModN ss 10 10.789 ± 0.305 s/op
Tests.testNModConst ss 10 7.550 ± 0.067 s/op
Run Code Online (Sandbox Code Playgroud)
我运行的是JDK 1.8.0_101,VM 25.101-b13,Intel(R)Core(TM)i7-4770 …