如何防止繁忙等待的优化

时间:2012-12-17 20:35:14

标签: compiler-optimization

我需要有一个忙等待的功能。

for(long int j=0; j<50000000; ++j)
  ;

当我在发布模式下编译时,这会得到优化。除了在调试模式下进行编译之外,还有一些方法可以使进行优化吗?我并不特别关心循环的实际数量,但必须是明显的繁忙延迟。

1 个答案:

答案 0 :(得分:4)

我不知道为什么你需要让CPU保持忙碌,但让我们假设你真的有充分的理由,比如确保你让CPU保持忙碌,这样它就不会考虑上周经历的那次分手并且全都郁闷但我离题......

你看到的问题是编译器执行“死代码消除”:它看到循环什么都不做(即没有副作用),因此将其删除。所以你可以让它产生副作用。

一个简单的解决方案就是这个功能:

void busywait(long iterations)
{
    for(volatile long i = 0; i != iterations; i++)
        ;
}

通过将i标记为volatile,您确保循环具有副作用,因为存储到易失性对象(即我们执行的递增)被视为具有副作用。