为什么没有优化不必要的原子负载?

时间:2019-05-08 17:52:49

标签: c++ code-generation atomic compiler-optimization volatile

让我们考虑一下这个简单的代码:

#include <atomic>

std::atomic<int> a;
void f(){
    for(int k=0;k<100;++k)
        a.load(std::memory_order_relaxed);
}

MSVC,Clang和GCC均执行100次负载,而显然可以进行优化。我希望函数f是nop(请参见生成的代码here

实际上,我希望此代码可以生成易失性原子:

volatile std::atomic<int> va;
void g(){
    for(int k=0;k<100;++k)
        va.load(std::memory_order_relaxed);
}

为什么编译器不能优化不必要的原子负载?

0 个答案:

没有答案