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

时间:2014-07-09 22:48:10

标签: c++ visual-studio visual-c++ c++11 visual-studio-2013

有时在编写基准测试时,我发现使用" opaque"阻止优化器完全删除变量的函数。在gcc和clang上我有一个使用内联汇编的实现,它似乎在我到目前为止所测试的所有情况下都能正常工作。以下是我感兴趣的一个简单示例(example on 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);
}

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

movl    $10, %eax
addl    $5, %eax
ret

然而,没有它产生的opaque函数:

movl    $15, %eax
ret

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

0 个答案:

没有答案