相关疑难解决方法(0)

ac/c ++编译器是否将两次幂值的常量除法优化为移位?

问题说明了一切.有谁知道以下......

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).是否有这样的情况,有些情况不是吗?

我真的很想知道,因为每当我写一个可以像这样优化的师时,我会花费一些心理能量,想知道一秒钟的宝贵事迹是否会浪费在一个转变就足够的分裂上.

c c++ optimization gcc

40
推荐指数
3
解决办法
1万
查看次数

为什么(n mod const)比(const mod n)更快?

在玩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 …

java x86-64 jmh

5
推荐指数
1
解决办法
124
查看次数

标签 统计

c ×1

c++ ×1

gcc ×1

java ×1

jmh ×1

optimization ×1

x86-64 ×1