如何告诉C++不要优化丢弃的表达式?

Ann*_*inn 5 c++ optimization visual-studio-2010

我想介绍一系列的matrice操作,以了解他们将花多少时间.(当我想起CPU可以通过指令咀嚼的速度是多么愚蠢时,我更不倾向于考虑优化)

for(int n = 0; n < times; ++n){
    // scrambled to miss the cache on purpose
    matrix[ rand()%matrixLen ] * matrix[ rand()%matrixLen ];
}
Run Code Online (Sandbox Code Playgroud)

我的编译器不断优化这个表达式.有没有办法让它实际执行此代码,同时仍然保留所有其他优化?

Yak*_*ont 1

生成一个成本低廉但技术上依赖于所有这些的结果。

例如,将它们全部相加并提取结果值。

然后,要么对返回值进行块优化(创建动态库或其他内容),要么在分析代码之外输出该值。

这仍然可能受到代码元素重新排序的影响,但它主要阻止表达式消除。(请注意,如果不实际执行,则很难生成结果 - 例如,加法比乘法更好,因为一旦命中,0它可能会根据“假设”规则提前退出)