小编use*_*313的帖子

防止优化器在visual studio中优化变量

有时在编写基准时,我发现使用"不透明"函数会阻止优化器完全删除变量.在gcc和clang上我有一个使用内联汇编的实现,它似乎在我到目前为止所测试的所有情况下都能正常工作.这是我感兴趣的一个简单例子(关于godbolt的例子):

template<class T> 
void opaque(T&& t)
{
    asm volatile("" : "+r" (t));
}

int test(int a) { return a + 5; }

int main()
{
    int a = 10;
    opaque(a);
    return test(a);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码生成以下程序集:

movl    $10, %eax
addl    $5, %eax
ret
Run Code Online (Sandbox Code Playgroud)

而没有它产生的不透明功能:

movl    $15, %eax
ret
Run Code Online (Sandbox Code Playgroud)

我如何为visual studio编译器(特别是2013)编写等效的opaque函数?

c++ visual-studio visual-c++ c++11 visual-studio-2013

6
推荐指数
1
解决办法
1873
查看次数